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

时间:2017-12-14 07:23:27

标签: python tensorflow tensorflow-gpu

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

1 个答案:

答案 0 :(得分:3)

您可以使用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的包装器,但它带有一个布尔值来激活或停用丢失。 (您可以像我的示例中的概率一样设置布尔值)。