如何在 tf.contrib.learn.Experiment 中使用 train_and_evaluate 函数正确应用 dropout

How to properly apply dropout with train_and_evaluate function in tf.contrib.learn.Experiment

我正在使用 tensorflow high level api tf.contrib.learn.Experiment 到 运行 我的模型。 我在模型代码中应用了 tf.nn.dropout 并使用 train_and_evaluate 函数来训练模型。但是,我不知道如何在 tf.nn.dropout 中仅在 train_and_evaluate 过程中的评估中将参数 keep_prob 设置为 1(因为通常 dropout 只应在训练时使用)。

您可以使用 tf.estimator.ModeKeys 来检测您是在 TRAIN 模式下还是在 EVAL 模式下调用您的估算器。

在为 Estimator 构建模型函数时(如此 tutorial 中所述),该函数必须遵守骨架:

def model_fn(features, labels, mode, params):

mode 参数是一个tf.estimator.ModeKeys,因此,在您的模型函数中,您可以简单地针对mode 参数进行测试,以检测您是在训练中还是在评估中。 (或预测)。

一个简单的例子:

def model_fn(features, labels, mode, params):
    keep_prob = 1.0
    if mode == tf.estimator.ModeKeys.TRAIN:
        keep_prob = 0.8
    [...]

边上:

考虑使用 tf.layers.dropout,而不是使用 tf.nn.dropout。它是 tf.nn.dropout 的包装器,但它带有一个布尔值来激活或停用 dropout。 (您可以按照与我示例中的概率相同的方式设置布尔值)。