让我们说,我正在构建一个像这样的神经网络:
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而不是级联回到早期图层。
答案 0 :(得分:1)
Dropout设置在有给定机会的情况下传递给0
的激活。很难给出一个'层?退出,因为您只是在给定机会的情况下设置与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.)
请记住:丢失可能不会直接干扰先前的图层,但是,在反向传播期间,先前和连续图层的权重将适应被禁用的激活的一半。因此,您无法阻止辍学对先前的图层产生(间接)影响。