根据API tf.contrib.rnn.DropoutWrapper:
output_keep_prob:单位Tensor或0到1之间的 float ,输出保持概率;如果它是常量和 1,则不会添加输出丢失。state_keep_prob:单位Tensor或0到1之间的 float ,输出保持概率;如果它是常量和 1,则不会添加输出丢失。状态丢失是在单元的输出状态上执行的。
这两个参数的描述差不多吧?
我设置output_keep_prob为默认值和state_keep_prob=0.2,400 mini后loss总是在11.3左右-batches 的训练,当我将 output_keep_prob=0.2 和 state_keep_prob 设置为默认值时,我的模型返回的 loss 迅速下降到 左右6.0 在 20 个小批量之后!我花了 4 天时间才找到这个 bug,真的很神奇,谁能解释一下这两个参数的区别?非常感谢!
超参数:
- lr = 5E-4
- 批量大小 = 32
- 状态大小 = 256
- multirnn_depth = 2
这是 dataset .
请您参考如下方法:
state_keep_prob是添加到 RNN 隐藏状态的 dropout。添加到时间步i状态的 dropout 将影响状态i+1, i+2, ...的计算。正如您所发现的,这种传播效应通常不利于学习过程。output_keep_prob是在RNN输出中加入的dropout,dropout不会影响后续状态的计算。
