【问题标题】:Tensorflow Dropout: What happens if I apply two dropout layers?Tensorflow Dropout:如果我应用两个 dropout 层会发生什么?
【发布时间】:2017-10-20 04:01:37
【问题描述】:

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

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 是层操作,很像 ReLU、池或激活。删除(重置)一半的权重不会直接影响前一层或后续层的权重;它应用于前向数据流中的这一点。对反向传播没有影响。
  • 简而言之,100% 保持的 dropout 是一个空操作。
  • @Prune dropout 丢弃激活。 dropconnect 下降权重。
  • 是的,我打算做的是防止早期层的辍学。但正如你和 Thomas 解释的那样,dropout 只应用于它所应用的层。

标签: python tensorflow neural-network dropout


【解决方案1】:

Dropout 设置以给定机会传递到0 的激活。很难给出“层”辍学,因为您只是在给定的机会下设置与01 的连接。

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

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

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

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

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

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

【讨论】:

  • 好的明白了!您介意分享您最后一个突出显示的句子的信息来源吗?
  • @Ulu83 实际上是从您的问题中复制的评论。不过我改了。
猜你喜欢
  • 1970-01-01
  • 2021-01-25
  • 2019-08-09
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
  • 2020-01-16
相关资源
最近更新 更多