我试图理解output_keep_prob
的概念:
因此,如果我的示例是简单的RNN:
with tf.variable_scope('encoder') as scope:
cells = rnn.LSTMCell(num_units=500)
cell = rnn.DropoutWrapper(cell=cells, output_keep_prob=0.5)
model = tf.nn.bidirectional_dynamic_rnn(cell, cell, inputs=embedding_lookup, sequence_length=sequence_le,
dtype=tf.float32)
我的困惑是,如果我给出
output_keep_prob=0.5
实际上是什么意思?我知道,通过添加辍学,它不太容易过拟合(称为正则化)。它会在训练过程中随机关闭神经元的激活,好的,我明白了这一点,但是当我给output_keep_prob=0.5
并且我的no_of_nodes = 500则0.5表示它将在每次迭代中随机打开50%的节点,或者这意味着它将仅保留那些概率大于或等于0.5的连接keep_layers whose probability =>0.5
要么
turn off 50% randomly nodes unit at each iteration ??
我试图通过这个stackoverflow answer来理解这个概念,但是还有一个困惑,实际上0.5意味着什么?它应该在每次迭代中删除50%的节点,或者只保留那些概率大于或等于0.5的节点
如果答案是第二
keep only those nodes which have probability more or equal to 0.5
:那么这意味着我假设给定500个节点单位,只有30个节点具有0.5的概率,因此它将剩下470个节点,并且仅将30个节点用于入站和出站连接?
因为this answer说:
假设您在图层中有10个单位,并将keep_prob设置为0.1,
然后将激活10个随机选择的9个单位
到0,其余的将被缩放10倍。我认为
更精确的描述是您只保留激活10
百分比的节点。
@mrry的另一面this answer说:
这意味着层之间的每个连接(在这种情况下,
最后一个紧密连接的层和读出层)将仅用于
训练时概率为0.5。
谁能给出一个清晰的解释,哪个是正确的,而这个值在keep_prob中实际代表什么?
最佳答案
Keep_prop
表示保留任何给定神经元输出的概率(与掉落相反,即归零)。换句话说,keep_prob = 1 - drop_prob
。tf.nn.dropout()
描述指出
默认情况下,每个元素都是独立保留或删除的。
因此,如果考虑一下,如果您有大量神经元,例如一层中有10,000个,而keep_prob
就是0.3,那么3,000是保留的神经元数量的期望值。因此,或多或少地说keep_prob
为0.3意味着保持10,000个神经元中的3,000个随机选择的值。但不完全正确,因为实际数字可能与3,000略有不同。
缩放出现在图片中,因为如果您丢弃一定数量的神经元,则该层的预期总和将减少。因此,将剩余的值相乘以前馈相同数量级的值。如果您加载预训练的网络并希望继续训练,但现在具有不同的keep_prob
值,则这尤其重要。
(请注意,您可以决定使用noise_shape
参数将非独立性引入放置概率中,请参见tf.nn.drouput()
description,但这不在此问题的范围内。)
对于网络的每次调用,都会重新计算是否丢弃神经元的随机决策,因此每次迭代都会丢弃一组不同的神经元。辍学背后的想法是,后续层不能过度拟合,也无法学习观察某些激活的任意星座。通过始终更改以前可用的激活来破坏“懒惰神经元过度适应的秘密计划”。
关于python - Tensorflow:实际上tf.nn.dropout output_keep_prob是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49864214/