Skip to main content
 首页 » 编程设计

python之tf.contrib.rnn.DropoutWrapper的state_keep_prob和output_keep_prob参数有什么区别

2025年05月04日24zhoujg

根据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不会影响后续状态的计算。