kaldi参数研读

1.cmd=“queue.pl -q all.q” && gpu_cmd=“queue.pl -q g.q”

使用sge集群,制定所使用的sge集群的queue为all.q, 一般all.q 会包含所有的主机
queue.pl -q g.q, 使用GPU
https://blog.csdn.net/huchad/article/details/52189726
https://blog.csdn.net/boyStray/article/details/89046837

2. nj=1

nj是看有几批
https://blog.csdn.net/eqiang8848/article/details/89552963

神经网络搭建及训练相关参数

3. chunk_size是什么

Chunk的大小是我们在训练或解码中每个数据块所含(输出)帧的数量。在get_egs.sh和train_dnn.py脚本中,chunk-size的也被称为frames-per-eg(在某些上下文中,这与块大小不同;见下文)。在解码中,我们把它称为frame-per-chunk。
https://www.cnblogs.com/JarvanWang/p/10145897.html

3.1 chunk_width是什么

–egs.chunk-width
egs(examples)中每个chunk包含的帧数。注意:如果将值翻一番,则应将"–trainer.samples-per-iter"值折半。
https://www.cnblogs.com/JarvanWang/p/10145897.html

3.2 samples-per-iter是什么

–trainer.samples-per-iter
每个ark(archive,档案)中包含的egs(examples,样本)数。每个eg(example,样本)包含’chunk_width’个帧。
chunk_width=20、samples_per_iter=20000时;相当于训练普通DNN时每次迭代使用20*20000=400000帧。
https://www.cnblogs.com/JarvanWang/p/10145897.html

4. left_context_initial=-1 & right_context_final=-1

在版本5.1和更高版本中,您可以指定extra-left-context-initial和extra-right-context-final,允许话语的开始/结束具有不同的上下文量。如果您指定这些值,通常将它们都指定为0(即没有额外的上下文)。但是,为了与旧版本兼容,它们通常默认为-1(意思是复制默认的左上方和右上方)。
https://www.cnblogs.com/JarvanWang/p/10145897.html

5. eg是什么

example, /eg-/, 样例,样本,可用其IPA音标"eg"来作为其缩写;在传统的语音识别中,一个example,即一帧以及标签的二元组(frame, label)。
egs,多个eg,多个样本。
对于不使用上下文帧以及任何时间信息的DNN,如以Sigmoid、Tanh、ReLu为神经元的DNN。

组合为一个块,即chunk,使得这些帧能共享左右上下文帧:
8帧,总共需要20帧的左右上下文
chunk与egs的区别:
chunk:[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
eg:[0, 1, 2, 3, 4, 5, 6, 7]
即:chunk是显式包含左右上下文帧的eg
https://www.cnblogs.com/JarvanWang/p/10145897.html

6. chunk_left_context是什么

若以帧为单位进行LSTM的训练,一整句话的所有帧能不断地在神经网络中进行前向传播;
若以chunk为单位将一个语句进行切分,除一句话的第一个chunk外, 其余chunk的第一帧均无法获取到上一帧(位于上一个chunk)的细胞记忆Ct-1和细胞输出ht-1
为了解决这一问题,将chunk-left-context数的帧输入到LSTM中,以最大程度地近似上一个chunk最后一针对应的细胞记忆Ct-1和细胞输出ht-1
https://www.cnblogs.com/JarvanWang/p/10145897.html

7. Minibatch大小

nnet3-merge-egs将各个训练样本合并到包含许多不同样本的minibatch中(每个原始样本获得不同的’n’索引)。 minibatch-size是minibatch的大小,指的是:将多个样本的帧以及label组合为一个样本,即eg的数量;
https://www.cnblogs.com/JarvanWang/p/10145897.html

8. 相关网页

脚本注释:https://www.cnblogs.com/welen/p/7521723.html
声学模型部分翻译:https://sourceforge.net/p/kaldichina/mailman/kaldichina-users/
num_archives相关:https://blog.csdn.net/eqiang8848/article/details/89552963 ???
特征提取FBank:https://blog.csdn.net/wxb1553725576/article/details/78048546
kaldi会议记录:https://wenku.baidu.com/view/7ba36d21804d2b160a4ec00f.html
Kaldi的nnet2 Component:https://www.cnblogs.com/JarvanWang/p/7499600.html

9. num_jobs_initial= & num_jobs_final=

chain注意事项:
如果只有单个gpu ,需要将num-jobs-initial和num-jobs-final都设为1,这个效果将比把num-chunk-per-minibatch改为很小值效果更好。这些参数的改变都可能会影响结果,如果将num-jobs-initial和num-jobs-final都设为1,建议将epochs改为原来的2/3。
train_stage可以改为从报错的迭代次数开始。
选择ReLu激活函数的话,调参数时需要注意设定的学习速率,不要让过多的神经元处于ReLu函数左边额死亡状态。
通常在解码中使用的默认声学权重(0.1)是不恰当的 - 对于chain模型,最佳声学权重接近于1。因此,我们脚本steps/nnet3/decode.sh中将选项-acwt默认设定为1.0。
有效学习率等价的看成学习率除以任务数。
local/chain/run_tdnn.sh:
30 initial_effective_lrate=0.001
31 final_effective_lrate=0.0001
白总说:用默认的就可以了,训练发现initial-jobs 和final-jobs弄成一样,也没啥区别。默认的效果可以
训练的trick:https://shiweipku.gitbooks.io/chinese-doc-of-kaldi/content/dan_dnn.html
原文:https://blog.csdn.net/eqiang8848/article/details/89552963

10. apply-cmvn

apply-cmvn --utt2spk=ark:${data_dir}/utt2spk scp:${data_dir}/cmvn.scp scp:${data_dir}/feats.scp ark:${mfcc_dir}/after-cmvn.ark  || exit 1

首先这个是一个feats变量定义,这个变量作为后续其他命令的参数,这个主要处理特征数据的。
这里用到了两个kaldi函数,apply-cmvn 和 add-deltas
apply-cmvn 的输入3个文件:
–utt2spk=ark:sdata/JOB/utt2spk语料和录音人员关联文件scp:sdata/JOB/utt2spk语料和录音人员关联文件scp:sdata/JOB/cmvn.scp 说话人相关的均值和方差
scp:$sdata/JOB/feats.scp 训练用特征文件
对feats.scp做归一化处理
输出是 ark:-|,利用管道技术把输出传递给下一个函数作为输入
add-deltas 输入是ark:-,表示把上一个函数的输出作为输入(实际上就是整个训练特征数据),

输出  ark:- | 管道技术同上。训练数据增加差分量,比如13维度mfcc处理后变成39维度
这样的输入输出重定向和管道技术后续使用非常多,所先熟练掌握linux shell的语法。

原文:https://blog.csdn.net/fandaoerji/article/details/50262969

11. 神经网络

input dim=`feat-to-dim scp:$data_dir/feats.scp -` name=input
conv-relu-renorm-layer name=conv1 height-in=32 height-out=16 height-subsample-out=2 num-filters-out=16 height-offsets=-2,-1,0,1,2 time-offsets=-2,-1,0,1,2 required-time-offsets=-2,-1,0,1,2
conv-relu-renorm-layer name=conv2 height-in=16 height-out=16 height-subsample-out=1 num-filters-out=8 height-offsets=0 time-offsets=0 required-time-offsets=0
fast-lstm-layer name=lstm1 cell-dim=${lstm_dim} delay=-2 decay-time=${lstm_decay}
relu-renorm-layer name=tdnn2 input=Append(-4,-2,0) dim=${tdnn_dim}
fast-lstm-layer name=lstm2 cell-dim=${lstm_dim} delay=-4 decay-time=${lstm_decay}
relu-renorm-layer name=tdnn3 input=Append(-8,-4,0) dim=${tdnn_dim}
fast-lstm-layer name=lstm3 cell-dim=${lstm_dim} delay=-8 decay-time=${lstm_decay}
relu-renorm-layer name=tdnn4 input=Append(-16,-8,0) dim=${tdnn_dim}
output-layer name=output include-log-softmax=true dim=3 learning-rate-factor=0.1 input=tdnn4

input 输入层 dim 输入维度 name 层的名称,在网络中定义的名称
conv-relu-renorm-layer 卷积层 name 卷积层名称 height-in 输入卷积核的长 height-out 输出卷积核的长 num-filters-out 输出卷积核的数量 height-offsets=-2,-1,0,1,2 time-offsets=-2,-1,0,1,2 required-time-offsets=-2,-1,0,1,2
fast-lstm-layer fastlstm name
relu-renorm-layer name=tdnn input=Append(-4,-2,0) 输入三个帧 0表示当前帧 -2表示向左隔两个的帧,-4表示向左隔四个的帧

【深度学习系列】卷积神经网络详解(二)——自己手写一个卷积神经网络: https://cloud.tencent.com/developer/article/1020450
Kaldi nnet3的fastlstm与标准LSTM: https://www.cnblogs.com/JarvanWang/p/10183485.html
神经网络-CNN结构和语音识别应用:https://blog.csdn.net/xmdxcsj/article/details/54695995
语音识别kaldi该如何学习?: https://www.zhihu.com/question/65516424/answer/265297686
机器学习与人工智能技术分享(未完待续):https://www.zybuluo.com/vivounicorn/note/446479

12. xconfig_to_configs.py

steps/nnet3/xconfig_to_configs.py --xconfig-file $dir/configs/network.xconfig --config-dir $dir/configs/
将写好的神经网络信息转换为config文件,同时向$dir/configs/vars写入信息

13. steps/nnet3/train_raw_rnn.py脚本调用参数说明

steps/nnet3/train_raw_rnn.py --stage=$train_stage \       # 控制代码块的运行,方便调试
    --feat.cmvn-opts="--norm-means=false --norm-vars=false" \
    --egs.chunk-width=$chunk_width \
    --egs.dir=${egs_dir} \
    --egs.stage=$get_egs_stage \
    --egs.chunk-left-context=${chunk_left_context} \
    --egs.chunk-right-context=${chunk_right_context} \
    --egs.chunk-left-context-initial=0 \
    --egs.chunk-right-context-final=0 \
    --trainer.num-epochs=$num_epochs \        # 训练轮数
    --trainer.samples-per-iter=$samples_per_iter \
    --trainer.optimization.num-jobs-initial=$num_jobs_initial \
    --trainer.optimization.num-jobs-final=$num_jobs_final \
    --trainer.optimization.initial-effective-lrate=$initial_effective_lrate \
    --trainer.optimization.final-effective-lrate=$final_effective_lrate \
    --trainer.optimization.shrink-value=0.99 \
    --trainer.dropout-schedule="$dropout_schedule" \
    --trainer.rnn.num-chunk-per-minibatch=128,64 \
    --trainer.optimization.momentum=0.5 \
    --trainer.deriv-truncate-margin=10 \
    --trainer.max-param-change=$max_param_change \
    --trainer.compute-per-dim-accuracy=true \
    --cmd="$gpu_cmd" --nj 40 \      # cmd设置内存管理,nj设置进程数
    --cleanup=true \                # 是否清除网络配置信息
    --cleanup.remove-egs=$remove_egs \
    --cleanup.preserve-model-interval=10 \
    --use-gpu=true \                # 是否使用GPU
    --use-dense-targets=true \      # 是否使用稠密目标
    --feat-dir=$data_dir \          # 特征目录
    --targets-scp="$targets_dir/targets.scp" \
    --egs.opts="--frame-subsampling-factor 2 --num-utts-subset $num_utts_subset" \
    --dir=$dir || exit 1
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值