为什么在tensorflow的tf.nn.dropout中缩放输入?
deep-learning
machine-learning
neural-network
tensorflow
4
0

我不明白为什么辍学在tensorflow中如此工作。 CS231n的博客说: "dropout is implemented by only keeping a neuron active with some probability p (a hyperparameter), or setting it to zero otherwise."您也可以从图片中看到这一点(来自同一站点) 在此处输入图片说明

从张量流站点, With probability keep_prob, outputs the input element scaled up by 1 / keep_prob, otherwise outputs 0.

现在,为什么将输入元素按1/keep_prob ?为什么不以概率保留输入元素,而不用1/keep_prob缩放比例呢?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

假设网络有n神经元,并且我们应用了辍学率1/2

训练阶段 ,我们将剩下n/2神经元。因此,如果您期望所有神经元输出x ,现在您将获得x/2 。因此,对于每一批,网络权重均根据此x / 2进行训练

测试/推论/验证阶段 ,我们不应用任何退出操作,因此输出为x。因此,在这种情况下,输出将是x而不是x / 2,这将给您不正确的结果。因此,您可以做的是在测试过程中将其缩放为x / 2。

而不是上述特定于测试阶段的缩放比例。 Tensorflow的dropout层所做的是,无论是否有dropout(训练或测试),它都会缩放输出,以使总和恒定。

收藏
评论

此缩放比例使同一网络可用于训练( keep_prob < 1.0 )和评估( keep_prob == 1.0 )。从辍学论文中

想法是在测试时使用单个神经网络而不会出现辍学现象。该网络的权重是训练后的权重的按比例缩小版本。如果在训练期间以概率p保留一个单位,则该单位的输出权重在测试时间乘以p ,如图2所示。

TensorFlow实现keep_prob在测试时添加操作以通过keep_prob缩小权重, 1. / keep_prob在培训时添加一个操作以将权重1. / keep_prob 。对性能的影响可以忽略不计,代码也更简单(因为我们使用同一张图,并将keep_prob视为tf.placeholder() ,根据我们是在训练还是评估网络,它会获得不同的值)。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号