如何在 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。 (您可以按照与我示例中的概率相同的方式设置布尔值)。
我正在使用 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。 (您可以按照与我示例中的概率相同的方式设置布尔值)。