根据tf.contrib.rnn.DropoutWrapper
的API: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.2
和state_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/