Tensorflow Dropout:如果我应用两个dropout图层会发生什么?

时间:2017-05-19 22:40:46

标签: python tensorflow neural-network 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而不是级联回到早期图层。

1 个答案:

答案 0 :(得分:1)

Dropout设置在有给定机会的情况下传递给0的激活。很难给出一个'层?退出,因为您只是在给定机会的情况下设置与01的连接。

如果您想要从某个层丢失中提供传出连接,您应该执行以下操作:

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.)

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