如何解释tf.layers.dropout的训练参数

6

对于tf.layers.dropout(),我不太理解training参数的文档。

文档中写到:

training: Either a Python boolean, or a TensorFlow boolean scalar tensor
      (e.g. a placeholder). Whether to return the output in training mode
      (apply dropout) or in inference mode (return the input untouched).

我的理解是,根据training = Truetraining = False的情况,将应用dropout技术。然而,我不确定哪个值会应用dropout技术(即哪个处于训练模式)。鉴于这是一个可选参数,我原以为tf.layers.dropout()默认会应用,但实际上默认值是False,这很让人困惑,因为 intuitively training=False似乎意味着默认情况下不处于训练模式。
看起来,要实际应用tf.layers.dropout(),需要像下面这样做: tf.layers.dropout(input, 0.5, training=mode==Modes.TRAIN) 从文档中并不容易看出这一点,因为training是一个可选参数。
这是否是正确实现tf.layers.dropout的方法?为什么training标志不自动与Modes.TRAIN绑定作为默认值,然后需要针对其他情况进行调整呢?默认值为training=False似乎非常具有误导性。
1个回答

2
您对 dropout() 及其 training 参数的解释是正确的。然而,像您建议的自动 Modes.TRAIN 检查是不可能的。模式通常绑定到一个可选参数的 estimator model_fn()。Estimators 是一种更高级别的抽象,并不是 TensorFlow 模型所必需的。
至于为什么 TensorFlow 设计他们的 API 时使用了 false 默认值,我们只能推测。一个解释可能是整个抽象层中的 layers 预期默认为推理模式,从而解释了 dropout() training 的默认值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接