0

可以说,我正在构建一个像这样的神经网络:

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,而不是级联回更早的层。

4

1 回答 1

1

0Dropout 设置以给定机会通过的激活。很难给出“层”辍学,因为您只是在给定的机会设置连接0或连接。1

如果你想从某个层放弃传出连接,你应该这样做:

x = tf.nn.thislayershallhavedropout(x,...)
x = tf.nn.dropout(x, keep_prob=.5)

你基本上已经完成了。因此,来自 50% 的激活thislayershallhavedropout将被停用。

顺便说一句,正如评论中指出的那样,将 keep_prob 设置为1根本没有任何效果:这将使所有激活都像往常一样通过。

x = tf.nn.dropout(x, keep_prob=1.)

请记住:dropout 可能不会直接干扰前一层,但是,在反向传播期间,前一层和后一层的权重将适应被禁用的激活的一半。因此,您无法防止 dropout 对前一层产生(间接)影响。

于 2017-05-21T18:12:44.827 回答