gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:52:09 26 4
gpt4 key购买 nike

我尚未成功使用 TensorFlow 训练 RNN 解决语音到文本问题。我决定使用纯 FFT(即频谱图)作为训练数据来重现 Alex Graves, and Navdeep Jaitley, 2014 中描述的方法的结果。 ,并编码了 3 层双向 RNN,每个层有 300 个 LSTM 单元。我想描述一下从预处理音频信号到解码 logits 所遵循的步骤。

预处理:

  1. 使用 matplotlib.mlab 中的频谱图函数将时域中的每个音频信号分割为 20ms 的帧,NFFT = (fs/1000 * 20 个样本) 长度,并执行重叠 7ms 的加窗和 FFT。

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

  3. 值得一提的是,频谱图并未标准化,因为它仅使 TensorFlow 出于某种原因产生 nan 值。有人请澄清为什么会发生这种情况。我有一种感觉梯度正在消失。关于使用什么初始化器范围有什么建议吗?

  4. 由于不同的音频文件长度不同,我用 max_time 填充了每个批处理的帧,因为这是形成 mini-batch 所必需的。形状[max_time,batch,NFFT] .

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

RNN 配置:

  1. 前向和后向单元,每个 LSTM 单元每层有 300 个单元,使用窥孔架构,忘记偏差最初设置为 0 以查看性能。

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

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

  4. tf.nn.bidirectional_dynamic_rnn不包括输出层sigmoid or softmax ,我执行线性回归,其权重形状为 = [hidden_size,n_chars] .

  5. 我使用了损失函数tf.nn.ctc_loss ,它最初返回 650 或 700 等巨大值,并在数百个 epoch 后下滑至最大值 500。

  6. 最后使用CTC波束搜索解码器从输出softmax or sigmoid生成的logits中找到最佳路径。层。

现在,我不明白我哪里出了问题,但我只是没有得到所需的转录(即权重没有收敛以产生目标结果)。我请求有人澄清为什么会发生这种情况。我尝试过使用 100 个音频剪辑来使网络过度拟合,但没有用。预测结果与期望的转录相差甚远。

感谢您的时间和支持。

最佳答案

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

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

关于tensorflow - 使用 TensorFlow 进行端到端语音识别的 RNN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38385292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com