Blame view
egs/aurora4/s5/local/nnet/run_dnn.sh
6.1 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 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
#!/bin/bash # Copyright 2012-2013 Brno University of Technology (Author: Karel Vesely) # Apache 2.0 # In this recipe we build DNN in four stages: # 1) Data preparations : the fMLLR features are stored to disk # 2) RBM pre-training : in this unsupervised stage we train stack of RBMs, a good starting point for Cross-entropy trainig # 3) Frame-level cross-entropy training : in this stage the objective is to classify frames correctly. # 4) Sequence-criterion training : in this stage the objective is to classify the whole sequence correctly, # the idea is similar to the 'Discriminative training' in context of GMM-HMMs. . ./cmd.sh ## You'll want to change cmd.sh to something that will work on your system. ## This relates to the queue. . ./path.sh ## Source the tools/utils (import the queue.pl) #false && \ { gmmdir=exp/tri4b ### ### Generate the alignments of dev93 ### (held-out set for Cross-entropy training) ### steps/align_fmllr.sh --nj 10 --cmd "$train_cmd" \ data/test_dev93 data/lang $gmmdir exp/tri4b_ali_dev93 || exit 1 ### ### Store the fMLLR features, so we can train on them easily ### # train si284 # generate the features dir=data-fmllr-tri4b/train_si284 steps/make_fmllr_feats.sh --nj 20 --cmd "$train_cmd" \ --transform-dir exp/tri4b_ali_si284 \ $dir data/train_si284 $gmmdir $dir/_log $dir/_data || exit 1 # eval92 dir=data-fmllr-tri4b/test_eval92 steps/make_fmllr_feats.sh --nj 8 --cmd "$train_cmd" \ --transform-dir exp/tri4b/decode_tgpr_eval92 \ $dir data/test_eval92 $gmmdir $dir/_log $dir/_data || exit 1 # dev93 (unsupervised fMLLR) # held-out set of Cross-entropy training dir=data-fmllr-tri4b/test_dev93 steps/make_fmllr_feats.sh --nj 10 --cmd "$train_cmd" \ --transform-dir exp/tri4b/decode_tgpr_dev93 \ $dir data/test_dev93 $gmmdir $dir/_log $dir/_data || exit 1 } ### ### Now we can pre-train stack of RBMs ### #false && \ { # Pre-train the DBN dir=exp/tri4b_pretrain-dbn (tail --pid=$$ -F $dir/_pretrain_dbn.log 2>/dev/null)& $cuda_cmd $dir/_pretrain_dbn.log \ steps/pretrain_dbn.sh --rbm-iter 3 data-fmllr-tri4b/train_si284 $dir } ### ### Now we train the DNN optimizing cross-entropy. ### This will take quite some time. ### #false && \ { # Train the MLP dir=exp/tri4b_pretrain-dbn_dnn ali=exp/tri4b_ali feature_transform=exp/tri4b_pretrain-dbn/final.feature_transform dbn=exp/tri4b_pretrain-dbn/6.dbn (tail --pid=$$ -F $dir/_train_nnet.log 2>/dev/null)& $cuda_cmd $dir/_train_nnet.log \ steps/train_nnet.sh --feature-transform $feature_transform --dbn $dbn --hid-layers 0 --learn-rate 0.008 \ data-fmllr-tri4b/train_si284 data-fmllr-tri4b/test_dev93 data/lang ${ali}_si284 ${ali}_dev93 $dir || exit 1; # decode with 'big-dictionary' (reuse HCLG graph) steps/decode_nnet.sh --nj 10 --cmd "$decode_cmd" --acwt 0.10 --config conf/decode_dnn.config \ exp/tri4b/graph_bd_tgpr data-fmllr-tri4b/test_dev93 $dir/decode_bd_tgpr_dev93 || exit 1; steps/decode_nnet.sh --nj 8 --cmd "$decode_cmd" --acwt 0.10 --config conf/decode_dnn.config \ exp/tri4b/graph_bd_tgpr data-fmllr-tri4b/test_eval92 $dir/decode_bd_tgpr_eval92 || exit 1; } ### ### Finally we train using sMBR criterion. ### We do Stochastic-GD with per-utterance updates. ### ### To get faster convergence, we will re-generate ### the lattices after 1st epoch of sMBR. ### dir=exp/tri4b_pretrain-dbn_dnn_smbr srcdir=exp/tri4b_pretrain-dbn_dnn acwt=0.10 # First we need to generate lattices and alignments: #false && \ { steps/align_nnet.sh --nj 100 --cmd "$train_cmd" \ data-fmllr-tri4b/train_si284 data/lang $srcdir ${srcdir}_ali_si284 || exit 1; steps/make_denlats_nnet.sh --nj 100 --cmd "$decode_cmd" \ --config conf/decode_dnn.config --acwt $acwt \ data-fmllr-tri4b/train_si284 data/lang $srcdir ${srcdir}_denlats_si284 || exit 1; } # Now we re-train the hybrid by single iteration of sMBR #false && \ { steps/train_nnet_mpe.sh --cmd "$cuda_cmd" --num-iters 1 --acwt $acwt --do-smbr true \ data-fmllr-tri4b/train_si284 data/lang $srcdir \ ${srcdir}_ali_si284 ${srcdir}_denlats_si284 $dir || exit 1 } # Decode #false && \ { for ITER in 1; do # decode dev93 with big dict graph_bd_tgpr steps/decode_nnet.sh --nj 10 --cmd "$decode_cmd" --config conf/decode_dnn.config \ --nnet $dir/${ITER}.nnet --acwt $acwt \ exp/tri4b/graph_bd_tgpr data-fmllr-tri4b/test_dev93 $dir/decode_dev93_bd_tgpr_it${ITER} || exit 1 # decode eval92 with big dict graph_bd_tgpr steps/decode_nnet.sh --nj 8 --cmd "$decode_cmd" --config conf/decode_dnn.config \ --nnet $dir/${ITER}.nnet --acwt $acwt \ exp/tri4b/graph_bd_tgpr data-fmllr-tri4b/test_eval92 $dir/decode_eval92_bd_tgpr_it${ITER} || exit 1 done } ### ### Re-generate lattices and run several more iterations of sMBR ### dir=exp/tri4b_pretrain-dbn_dnn_smbr_iter1-lats srcdir=exp/tri4b_pretrain-dbn_dnn_smbr acwt=0.10 # First we need to generate lattices and alignments: #false && \ { steps/align_nnet.sh --nj 100 --cmd "$train_cmd" \ data-fmllr-tri4b/train_si284 data/lang $srcdir ${srcdir}_ali_si284 || exit 1; steps/make_denlats_nnet.sh --nj 100 --cmd "$decode_cmd" \ --config conf/decode_dnn.config --acwt $acwt \ data-fmllr-tri4b/train_si284 data/lang $srcdir ${srcdir}_denlats_si284 || exit 1; } # Now we re-train the hybrid by several iterations of sMBR #false && \ { steps/train_nnet_mpe.sh --cmd "$cuda_cmd" --num-iters 4 --acwt $acwt --do-smbr true \ data-fmllr-tri4b/train_si284 data/lang $srcdir \ ${srcdir}_ali_si284 ${srcdir}_denlats_si284 $dir } # Decode #false && \ { for ITER in 1 2 3 4; do # decode dev93 with big dict graph_bd_tgpr steps/decode_nnet.sh --nj 10 --cmd "$decode_cmd" --config conf/decode_dnn.config \ --nnet $dir/${ITER}.nnet --acwt $acwt \ exp/tri4b/graph_bd_tgpr data-fmllr-tri4b/test_dev93 $dir/decode_dev93_bd_tgpr_it${ITER} || exit 1 # decode eval92 with big dict graph_bd_tgpr steps/decode_nnet.sh --nj 8 --cmd "$decode_cmd" --config conf/decode_dnn.config \ --nnet $dir/${ITER}.nnet --acwt $acwt \ exp/tri4b/graph_bd_tgpr data-fmllr-tri4b/test_eval92 $dir/decode_eval92_bd_tgpr_it${ITER} || exit 1 done } # Getting results [see RESULTS file] # for x in exp/*/decode*; do [ -d $x ] && grep WER $x/wer_* | utils/best_wer.sh; done |