gpt4 book ai didi

python - Tensorflow : What is actually tf. nn.dropout output_keep_prob?

转载 作者:太空宇宙 更新时间:2023-11-04 02:28:05 24 4
gpt4 key购买 nike

我试图理解 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 answer 来理解这个概念但也有同样的困惑,实际上 0.5 意味着什么?它应该在每次迭代中丢弃 50% 的节点,或者只保留那些概率大于或等于 0.5 的节点

如果答案是第二个只保留概率大于或等于 0.5 的那些节点:

那么这意味着假设我已经给了 500 个节点单元并且只有 30 个节点有 0.5 的概率所以它会变成其余 470 个节点并且将只使用 30 个节点用于传入和传出连接?

因为 this answer说:

Suppose you have 10 units in the layer and set the keep_prob to 0.1, Then the activation of 9 randomly chosen units out of 10 will be set to 0, and the remaining one will be scaled by a factor of 10. I think a more precise description is that you only keep the activation of 10 percent of the nodes.

而另一边this answer @mrry 说:

it means that each connection between layers (in this case between the last densely connected layer and the readout layer) will only be used with probability 0.5 when training.

谁能给出一个明确的解释,哪个是正确的,这个值在 keep_prob 中究竟代表什么?

最佳答案

Keep_prop 表示保留任何给定神经元输出的概率(与丢弃相反,即归零。)换句话说,keep_prob = 1 - drop_prob .

tf.nn.dropout()说明指出

By default, each element is kept or dropped independently.

所以如果你考虑一下,如果你有大量的神经元,比如一层中有 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 ,但这超出了本问题的范围。)

对于网络的每次调用都会重新计算是否丢弃神经元的随机决定,因此您将在每次迭代中丢弃一组不同的神经元。 dropout 背后的想法是后续层不能过度拟合并学会观察某些激活的任意星座。你总是通过改变以前可用的激活来破坏“惰性神经元过度拟合的 secret 计划”。

关于python - Tensorflow : What is actually tf. nn.dropout output_keep_prob?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49864214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com