我试图理解的概念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
的实际上是什么意思?我知道通过添加 dropout 可以减少过度拟合(称为正则化)的可能性。它在训练期间随机关闭神经元的激活,好的,我明白了这一点,但是当我给出时我很困惑
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 答案来理解这个概念,但实际上 0.5 的含义也有同样的困惑?它应该在每次迭代中丢弃 50% 的节点,或者只保留那些概率大于或等于 0.5 的节点
如果答案是第二个keep only those nodes which have probability more or equal to 0.5
:
那么这意味着假设我给了 500 个节点单元,并且只有 30 个节点有 0.5 个概率,所以它将关闭其余 470 个节点,并且只使用 30 个节点进行传入和传出连接?
因为 这个答案说:
假设层中有 10 个单位并将 keep_prob 设置为 0.1,那么 10 个中随机选择的 9 个单位的激活将设置为 0,其余的将按 10 倍缩放。我认为更精确描述是你只保留了 10% 的节点的激活。
而另一方面,@mrry 的回答说:
这意味着层之间的每个连接(在这种情况下是在最后一个密集连接层和读出层之间)在训练时将仅以 0.5 的概率使用。
任何人都可以清楚地解释哪个是正确的以及这个值在keep_prob中实际代表什么?