Blame view
egs/cifar/v1/local/nnet3/tuning/run_resnet_1a.sh
4.38 KB
8dcb6dfcb first commit |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
#!/bin/bash # run_resnet_1a.sh is a quite well-performing resnet. # It includes a form of shrinkage that approximates l2 regularization. # (c.f. --proportional-shrink). # Definitely better: # local/nnet3/compare.sh exp/resnet1a_cifar10 # System resnet1a_cifar10 # final test accuracy: 0.9481 # final train accuracy: 0.9992 # final test objf: -0.171369 # final train objf: -0.00980603 # num-parameters: 1322730 # local/nnet3/compare.sh exp/resnet1a_cifar100 # System resnet1a_cifar100 # final test accuracy: 0.7478 # final train accuracy: 0.9446 # final test objf: -0.899789 # final train objf: -0.22468 # num-parameters: 1345860 # Set -e here so that we catch if any executable fails immediately set -euo pipefail # training options stage=0 train_stage=-10 dataset=cifar10 srand=0 reporting_email= affix=1a # End configuration section. echo "$0 $@" # Print the command line for logging . ./cmd.sh . ./path.sh . ./utils/parse_options.sh if ! cuda-compiled; then cat <<EOF && exit 1 This script is intended to be used with GPUs but you have not compiled Kaldi with CUDA If you want to use GPUs (and have them), go to src/, and configure and make on a machine where "nvcc" is installed. EOF fi dir=exp/resnet${affix}_${dataset} egs=exp/${dataset}_egs2 if [ ! -d $egs ]; then echo "$0: expected directory $egs to exist. Run the get_egs.sh commands in the" echo " run.sh before this script." exit 1 fi # check that the expected files are in the egs directory. for f in $egs/egs.1.ark $egs/train_diagnostic.egs $egs/valid_diagnostic.egs $egs/combine.egs \ $egs/info/feat_dim $egs/info/left_context $egs/info/right_context \ $egs/info/output_dim; do if [ ! -e $f ]; then echo "$0: expected file $f to exist." exit 1; fi done mkdir -p $dir/log if [ $stage -le 1 ]; then mkdir -p $dir echo "$0: creating neural net configs using the xconfig parser"; num_targets=$(cat $egs/info/output_dim) # Note: we hardcode in the CNN config that we are dealing with 32x3x color # images. nf1=48 nf2=96 nf3=256 nb3=128 common="required-time-offsets=0 height-offsets=-1,0,1" res_opts="bypass-source=batchnorm" mkdir -p $dir/configs cat <<EOF > $dir/configs/network.xconfig input dim=96 name=input conv-layer name=conv1 height-in=32 height-out=32 time-offsets=-1,0,1 required-time-offsets=0 height-offsets=-1,0,1 num-filters-out=$nf1 res-block name=res2 num-filters=$nf1 height=32 time-period=1 $res_opts res-block name=res3 num-filters=$nf1 height=32 time-period=1 $res_opts conv-layer name=conv4 height-in=32 height-out=16 height-subsample-out=2 time-offsets=-1,0,1 $common num-filters-out=$nf2 res-block name=res5 num-filters=$nf2 height=16 time-period=2 $res_opts res-block name=res6 num-filters=$nf2 height=16 time-period=2 $res_opts conv-layer name=conv7 height-in=16 height-out=8 height-subsample-out=2 time-offsets=-2,0,2 $common num-filters-out=$nf3 res-block name=res8 num-filters=$nf3 num-bottleneck-filters=$nb3 height=8 time-period=4 $res_opts res-block name=res9 num-filters=$nf3 num-bottleneck-filters=$nb3 height=8 time-period=4 $res_opts res-block name=res10 num-filters=$nf3 num-bottleneck-filters=$nb3 height=8 time-period=4 $res_opts channel-average-layer name=channel-average input=Append(2,6,10,14,18,22,24,28) dim=$nf3 output-layer name=output learning-rate-factor=0.1 dim=$num_targets EOF steps/nnet3/xconfig_to_configs.py --xconfig-file $dir/configs/network.xconfig --config-dir $dir/configs/ fi if [ $stage -le 2 ]; then steps/nnet3/train_raw_dnn.py --stage=$train_stage \ --cmd="$train_cmd" \ --image.augmentation-opts="--horizontal-flip-prob=0.5 --horizontal-shift=0.1 --vertical-shift=0.1 --num-channels=3" \ --trainer.srand=$srand \ --trainer.max-param-change=2.0 \ --trainer.num-epochs=60 \ --egs.frames-per-eg=1 \ --trainer.optimization.num-jobs-initial=1 \ --trainer.optimization.num-jobs-final=2 \ --trainer.optimization.initial-effective-lrate=0.003 \ --trainer.optimization.final-effective-lrate=0.0003 \ --trainer.optimization.minibatch-size=256,128,64 \ --trainer.optimization.proportional-shrink=50.0 \ --trainer.shuffle-buffer-size=2000 \ --egs.dir="$egs" \ --use-gpu=true \ --reporting.email="$reporting_email" \ --dir=$dir || exit 1; fi exit 0; |