根据tf.contrib.rnn.DropoutWrapperAPI


output_keep_prob:单位张量或浮点数介于0和1之间,输出保持概率;如果为常数且为1,则不会添加任何输出压降。
state_keep_prob:单位张量或浮点数介于0和1之间,输出保持概率;如果为常数且为1,则不会添加任何输出压降。对单元的输出状态执行状态删除。


这两个参数的描述几乎相同,对吗?

我将output_keep_prob设置为默认值,并设置为state_keep_prob=0.2,经过400次迷你批次的训练后,loss总是在11.3附近,而将output_keep_prob=0.2state_keep_prob设置为默认值,经过20个迷你批次后,模型很快就会降到loss左右!我花了4天的时间发现了这个bug,真是神奇,任何人都可以解释这两个参数之间的区别吗?非常感谢!

超级参数:


lr = 5E-4
batch_size = 32
state_size = 256
multirnn_depth = 2


这是dataset

最佳答案

state_keep_prob是添加到RNN的隐藏状态的缺失。添加到时间步长i状态的辍学将影响状态i+1, i+2, ...的计算。如您所知,这种传播效果通常不利于学习过程。
output_keep_prob是添加到RNN输出中的dropout,该dropout对后续状态的计算没有影响。

关于python - tf.contrib.rnn.DropoutWrapper的state_keep_prob和output_keep_prob参数之间有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45674857/

10-12 22:53