tensorflow:tf.nn.dropout和tf.layers.dropout之间有什么区别

时间:2017-06-06 16:44:30

标签: tensorflow

我对是否使用tf.nn.dropout或tf.layers.dropout感到困惑。

许多MNIST CNN示例似乎使用tf.nn.droput,其中keep_prop是params之一。

但是与tf.layers.dropout有什么不同? tf.layers.dropout中的“rate”参数类似于tf.nn.dropout?

或者一般来说,tf.nn.dropout和tf.layers.dropout之间的区别是适用于所有其他类似情况,例如tf.nn和tf.layers中的类似函数。

4 个答案:

答案 0 :(得分:32)

快速浏览一下 tensorflow/python/layers/core.pytensorflow/python/ops/nn_ops.py 表明tf.layers.dropouttf.nn.dropout的包装。

这两个功能的唯一区别是:

  1. tf.nn.dropout有参数keep_prob:"保留每个元素的概率"
    tf.layers.dropout有参数rate:&#34 ;辍学率"
    因此,keep_prob = 1 - rate定义为here
  2. tf.layers.dropout具有training参数:"是否在训练模式(应用辍学)或推理模式下返回输出(返回未改变的输入)。"

答案 1 :(得分:4)

这个想法是一样的,参数略有不同。在nn.dropout中, keep_prob是每个元素保留的概率。在layers.dropout rate = 0.1会丢失10%的输入单位

所以keep_prob = 1 - rate。 layers.dropout也允许training参数。

一般情况下,只需仔细阅读有关您关注的功能的文档,您就会看到差异。

答案 2 :(得分:2)

在训练阶段,他们是相同的(只要“掉落率”和“保持率”是一致的)。但是,对于评估(测试)阶段,它们完全不同。 tf.nn.dropout仍然会随机删除,而tf.layers.dropout不会删除任何内容(透明图层)。在大多数情况下,使用tf.layers.dropout是有意义的。

答案 3 :(得分:1)

除了@nikpod和@Salvador Dali的回答

在训练阶段,tf.nn.dropout将权重按1./keep prob缩放,而tf.layers.dropout将权重缩放1。/(1-rate)。

在评估期间,您可以将保持概率设置为1,这相当于将训练设置为假。