2021-03-03 Speech-Transformer项目参数设置1

一、batch_frames 参数设置

为了更方便测试batch_frames参数的设置,训练之前,将第3步单独写为train.sh文件,并将训练、开发集的json做些精简:

原始训练集:120098条语音               精简后: 9条语音

原始开发集:14326条语音                精简后:10条语音

另存为train.sh

训练集 9条语音:

训练集frames数(/egs/aishell/dump/train/deltafalse/utt2num_frames)

开发集 10条语音:

开发集frames数(egs/aishell/dump/dev/deltafalse/utt2num_frames)


由于train.sh调试不方便,改用单独调试train.py程序,LFR_m设置为1,LFR_n设置为1,此时frames数与原始语音一致。


在调试配置中设置参数

先将batch_frames 设置为 1000

src/data/data.py程序中设置调试断点


设置断点

开始调试,将total_frames、minibatch添加到观察点


单步执行,9条语音的训练集,按照frames数从大到小排序,依次读入total_frames,所以最先读入的是BAC009S0002W0129,frames数为612;

此时total_frames(当前为612) < batch_frames(当前设置为1000),所以需要继续读入下一条语音BAC009S0002W0122,frames数为598,即total_frames = 612 + 598 = 1210

执行下一条指令后,由于total_frames(当前为1210) > batch_frames(当前设置为1000),minibatch中放入2条语音BAC009S0002W0129、BAC009S0002W0122,作为minibatch的第0批。

继续运行程序,由于数据集还未结束,重新进入while内,total_frames被清0

再次读入BAC009S0002W0127,frames数为587

以此类推,将BAC009S0002W0127、BAC009S0002W0124读入minibatch的第1批

minibatch第3批包含: 411 + 385 + 337 = 1133

BAC009S0002W0130      411 

BAC009S0002W0123      385

BAC009S0002W0128      337

最终minibatch的批次数为 4,反应到训练log文件中Iter的个数。(此处print-freq设置为1)

下图中,Valid Summary为开发集中的批次,刚好也是4

将batch_frames 设置为 500


训练集minibatch批次为7


开发集mnibatch批次为8


与Iter个数对应

LFR_m,LFR_n,batch_frames不同条件下,资源占用情况:

m=4 n=3 bf=1500

Train Iter 31241  Valid Iter 3741    GPU Memory  ?  MiB

m=4  n=3  bf=3000

Train Iter 16701  Valid Iter  2001  GPU Memory   ?  MiB

m=4  n=3  bf=5000

Train Iter 10301  Valid Iter  1201  GPU Memory  4281 MiB

m=4  n=3  bf=10000

Train Iter 5201  Valid Iter  601  GPU Memory  7377 MiB

m=4  n=6  bf=10000

Train Iter 5201  Valid Iter  601  GPU Memory  3535 MiB

m=4  n=6  bf=20000

Train Iter 2601  Valid Iter  301  GPU Memory  4957 MiB

m=1  n=6  bf=20000

Train Iter 2601  Valid Iter  301  GPU Memory  4877 MiB

m=1  n=6  bf=30000

Train Iter 1701  Valid Iter  201  GPU Memory  6831 MiB


总结:

1、batch_frames设置与batch_size区别在于对语音的frames个数进行批量化。

2、语音数据集进行排序之后依次累加frames个数,如果超过batch_frames设置值,则将读入的语音作为一个批次,对应训练过程中的一个Iter,一次epoch即遍历一次数据集。

3、如果修改LFR_m,LFR_n的值,会改变总的 frames 数以及 Iter 数,即低帧率特征化提取。

你可能感兴趣的:(2021-03-03 Speech-Transformer项目参数设置1)