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

Yan*_*oon 3 python tensorflow tensorflow-gpu

我正在使用 tensorflow 高级 APItf.contrib.learn.Experiment来运行我的模型。我tf.nn.dropout在模型代码中应用并使用train_and_evaluate函数来训练模型。但是,我无法弄清楚如何仅在过程中的评估中将参数设置keep_prob为 1 (因为通常 dropout 只应在训练中使用)。tf.nn.dropouttrain_and_evaluate

Les*_*rel 5

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

在为 Estimator 构建模型函数时(如本教程中所述),该函数必须尊重骨架:

def model_fn(features, labels, mode, params):
Run Code Online (Sandbox Code Playgroud)

该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
    [...]
Run Code Online (Sandbox Code Playgroud)

在一边 :

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