我试图理解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/

10-12 16:31