【问题标题】:How to avoid overfitting Recurrent Neural Network如何避免过拟合循环神经网络
【发布时间】:2017-03-31 10:04:44
【问题描述】:

我一直在为语音识别训练基于双向 LSTM 的 RNN,一旦新上下文到达,网络似乎就会忘记旧上下文。我不确定如何解释它的行为;似乎网络过度拟合,以至于它一次只能记住一个特定案例。

代码链接为https://github.com/rajkumarcm15/Speech-Recognition/blob/master/MFCC_SWN_BN_Affine/train.py,其输出为https://github.com/rajkumarcm15/Speech-Recognition/blob/master/MFCC_SWN_BN_Affine/Results.pdf

在理解其输出模式方面需要一些帮助。

【问题讨论】:

    标签: tensorflow speech-recognition recurrent-neural-network


    【解决方案1】:

    我没有过多研究您的输出,但您是否看过 dropout 以最大程度地减少过度拟合?
    例如

    cell = GRUCell(num_neurons)  # Or LSTMCell(num_neurons)
    cell = DropoutWrapper(cell, output_keep_prob=dropout)
    cell = MultiRNNCell([cell] * num_layers)
    

    About dropout

    【讨论】:

    • 感谢您的信息。它确实有助于在更短的时间内获得更好的准确性,但是,给出属于不同音频剪辑的字符串的特殊问题尚未解决。
    【解决方案2】:

    其他建议(除了建议的 dv3 之外)您可以尝试一下,这通常对我有帮助:

    • 增加 hidden_​​size(尝试乘以 4)
    • 增加您的 batch_size(再次尝试乘以 4)

    此外,您的损失似乎仍在下降。也许更多的训练会有所帮助(而且,你只用这个数量的时期调整了你的学习率)。

    希望这会有所帮助!如果其中一个建议做了什么,请告诉我。

    【讨论】:

    • 当您说 hidden_​​size 时,您的意思是 num_units,不是吗?是的,我几乎没有见过有人使用超过 200 个,除了它确实增加了内存能力。不过,我已经将其设置为 250。我已将最新输出放入 Result New.pdf
    【解决方案3】:

    您是否在每个时期(例如)都执行验证步骤以检查此行为是否确实是由于过度拟合造成的?

    如果没有,您应该这样做,并检查是否存在某个训练步骤,验证集的损失开始增加而训练集的损失仍在减少。

    【讨论】:

    • 是的,我在每个 epoch 都进行验证,并且没有任何地方验证错误开始增加而训练减少,所以就这一点而言,我不能断定这是由于过度拟合,但什么是实际发生的事情有些莫名其妙。如果您看一下github.com/rajkumarcm15/Speech-Recognition/blob/master/…,将会很有帮助
    猜你喜欢
    • 2016-03-20
    • 2019-01-29
    • 1970-01-01
    • 2021-07-07
    • 2018-12-09
    • 1970-01-01
    • 2018-04-17
    • 2017-02-19
    • 2020-07-28
    相关资源
    最近更新 更多