我正在使用tensorflow高级api tf.contrib.learn.Experiment
来运行我的模型。
我在模型代码中应用了tf.nn.dropout
,并使用train_and_evaluate
函数来训练模型。但是,我不知道如何仅在keep_prob
进程内的评估中知道如何在tf.nn.dropout
中将参数train_and_evaluate
设置为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
的包装器,但它带有一个布尔值来激活或停用丢失。 (您可以像我的示例中的概率一样设置布尔值)。