- github
- fork了一个工程,学习了一下代码。这个工程提供了使用多个corpus的例子,我只用了timit,timit是比较老的一个数据集了。
- TIMIT 下载下来每段语音和其数据放在了很多不同的目录下,并且WAV文件是有一个header的,不能直接播放和读取。另一方面,在训练时,对每段语音来说,并不是直接输入,而是需要进行处理,在NLP中叫做word embedding,把一个词映射为一个向量。在语音识别中我不清除是不是也叫做word embedding,好像这一步就叫特征提取。工程需要一个list,其中保存了各个文件的路径,方便shuffle和读取数据。因此需要对下载下来的数据集简单处理一下。 这部分代码原工程没提供,所以自己写了一下,之后上传一下。
code
- 工程提供了一个配置的demo,配置文件中设置了超参数,我只用了ctc,没用attention。demo里面的optimizer用的是Adam,所以开始我也用了Adam,label是字符,但效果不太好,出现了过拟合, 训练集的cer(character error label,字符错误率)最后约为百分之10,开发集约为百分之30。TIMIT本来分为训练集和测试集两部分,所以我拿训练集作为开发集,没再划分出新的测试集,
- 可能因为我输入的是13维的mfcc特征,可能应该输入更高维的,原代码中assert写了输入大小能被3整除,但是被我注释掉了。同时配置demo中写的是fbank特征,我开始没注意到这个。之后再改进一下。
- 按我的配置文件,一块8G显存的1080Ti训练100个epoch需要8个小时…感觉有点长,要是有tesla就好了。