Tensorflow Dropout:如果我应用两个 dropout 层会怎样?
Tensorflow Dropout: What happens if I apply two dropout layers?
比方说,我正在构建一个像这样的神经网络:
x = tf.nn.conv2d(input, ...)
x = tf.nn.max_pool(x, ...)
x = tf.nn.dropout(x, keep_prob=1.)
x = tf.nn.thislayershallhavedropout(x,...)
x = tf.nn.dropout(x, keep_prob=.5)
这是否是告诉 TensorFlow 仅丢弃层 thislayershallhavedropout
的有效技术?
基本上,我想做的是告诉 TensorFlow 仅在单个层上使用 dropout,而不是级联回更早的层。
Dropout 设置有给定机会传递给 0
的激活。很难给出 'layer' dropout,因为你只是在给定机会的情况下设置与 0
或 1
的连接。
如果你想从某个层丢弃传出连接,你应该这样做:
x = tf.nn.thislayershallhavedropout(x,...)
x = tf.nn.dropout(x, keep_prob=.5)
你基本上已经做到了。因此来自 thislayershallhavedropout
的激活的 50% 将被禁用。
顺便说一句,正如评论中指出的那样,将 keep_prob 设置为 1
根本没有任何效果:这将使所有激活都正常通过。
x = tf.nn.dropout(x, keep_prob=1.)
请记住:dropout 可能不会直接干扰前面的层,但是,在反向传播过程中,前面和后续层的权重将适应被禁用的一半激活。因此,您无法阻止 dropout 对前一层产生(间接)影响。
比方说,我正在构建一个像这样的神经网络:
x = tf.nn.conv2d(input, ...)
x = tf.nn.max_pool(x, ...)
x = tf.nn.dropout(x, keep_prob=1.)
x = tf.nn.thislayershallhavedropout(x,...)
x = tf.nn.dropout(x, keep_prob=.5)
这是否是告诉 TensorFlow 仅丢弃层 thislayershallhavedropout
的有效技术?
基本上,我想做的是告诉 TensorFlow 仅在单个层上使用 dropout,而不是级联回更早的层。
Dropout 设置有给定机会传递给 0
的激活。很难给出 'layer' dropout,因为你只是在给定机会的情况下设置与 0
或 1
的连接。
如果你想从某个层丢弃传出连接,你应该这样做:
x = tf.nn.thislayershallhavedropout(x,...)
x = tf.nn.dropout(x, keep_prob=.5)
你基本上已经做到了。因此来自 thislayershallhavedropout
的激活的 50% 将被禁用。
顺便说一句,正如评论中指出的那样,将 keep_prob 设置为 1
根本没有任何效果:这将使所有激活都正常通过。
x = tf.nn.dropout(x, keep_prob=1.)
请记住:dropout 可能不会直接干扰前面的层,但是,在反向传播过程中,前面和后续层的权重将适应被禁用的一半激活。因此,您无法阻止 dropout 对前一层产生(间接)影响。