首页 文章

使用TensorFlow进行端到端语音识别的RNN

提问于
浏览
4

我没有成功使用TensorFlow训练RNN for Speech to text问题 . 我已决定使用纯FFT(即频谱图)作为训练数据来再现Alex Graves, and Navdeep Jaitley, 2014中描述的方法的结果,并且编码3层双向RNN,每个具有300个LSTM单元 . 我想描述从预处理音频信号到解码日志所遵循的步骤 .

预处理:

  • 来自matplotlib.mlab的已使用的规格函数将时域中的每个音频信号分段为20ms的帧,NFFT =(fs / 1000 * 20个样本)长度,并执行重叠7ms的加窗和FFT .

  • 我最初尝试计算功率谱 ps |fft|^2 ,和 10 * log10(ps) 的dB,但是TensorFlow CTC Loss函数产生nan值,并且优化器显然将所有参数更新为nan,因此我没有继续使用它 .

  • 要提到的是,谱图不是标准化的,因为它只会使TensorFlow由于某种原因产生纳米值 . 有人请说明为什么会这样 . 我有一种感觉渐变正在消失 . 有关使用初始化程序范围的任何建议吗?

  • 由于不同的音频文件具有不同的长度,我使用max_time填充每个批次的帧,因为这需要形成 mini-batch 形状 [max_time,batch,NFFT] .

  • 由于所有目标转录都是大写字母,因此我只将A-Z,空格和一些标点符号列入类列表(共32个),用于将字符串目标转录转换为SparseTensor .

RNN配置:

  • 前向和后向单元,每个LSTM单元,每层使用3个单元,使用窥孔结构,最初将忘记偏置设置为0以查看性能 .

  • 双向动态RNN,project_size设置为 hidden_size 500 .

  • 序列长度张量为批量中的每个数据及其最大时间长度适当分配值 .

  • 由于 tf.nn.bidirectional_dynamic_rnn 不包括输出层 sigmoid or softmax ,我执行线性回归,其权重将为shape = [hidden_size,n_chars] .

  • 我使用了损失函数 tf.nn.ctc_loss ,它最初返回650或700这样的巨大值,并在几百个历元之后向下滑动到最大值500 .

  • 最后,CTC波束搜索解码器用于从输出 softmax or sigmoid 层生成的对数中找到最佳路径 .

现在,我不明白我哪里出错了,但我只是没有得到所需的转录(即,权重没有收敛以产生目标结果) . 我请求有人请澄清为什么会这样 . 我试图用100个音频剪辑来装配网络,但没有用 . 预测结果远不及所需的转录 .

感谢您的时间和支持 .

3 回答

  • 1

    有很多参数可供使用 . 我发现具有高动量(大于 0.99 )的 momentum 优化器往往效果很好 . 其他人发现配料会导致问题,而且应该使用较小的批量 .

    无论哪种方式,这些模型的收敛需要很长时间 .

  • 1

    如果你想尝试这个,最好重现Eesen .

    如果你仍然需要张量流,你可以在tensorflow CTC example找到完整的 .

  • 0

    您可以在以下位置查看TensorFlow的工作示例(使用玩具数据集):https://github.com/igormq/ctc_tensorflow_example .

    随意使用!

相关问题