使用tf.data.Dataset每N步进行评估

TensorFlow是否有某种方法可以使用tf.data.Dataset API在训练的每N步自动对评估集进行评估?目前,我的输入函数如下所示:

def train_input_fn():
    dataset = tf.data.Dataset.from_tensor_slices((dict(train_x), train_y))
    return (
        dataset
        .repeat()
        .shuffle(len(train_x) * 1.33)
        .batch(128)
        .make_one_shot_iterator().get_next()
    )

def eval_input_fn():
    dataset = tf.data.Dataset.from_tensor_slices((dict(eval_x), eval_y))
    return (
        dataset
        .batch(len(eval_x)) # 使用整个评估集
        .make_one_shot_iterator().get_next()
    )

它们在一个tf.estimator.DNNRegressor实例上被调用,如下所示:

est = tf.estimator.DNNRegressor(...)
est.train(input_fn=train_input_fn, steps=5000)
est.evaluate(input_fn=eval_input_fn, steps=1)

回答:

使用已废弃的tf.contrib.learn.monitors.ValidationMonitor解决,如这个StackOverflow答案中所建议。使用monitors.replace_monitors_with_hooks实用函数,ValidationMonitor仍然可以用于Estimator上。

这是我的实现:

from tensorflow.contrib.learn.python.learn import monitors as monitor_lib
est = tf.estimator.DNNRegressor(...)
validation_monitor = tf.contrib.learn.monitors.ValidationMonitor(
    input_fn=eval_input_fn,
    every_n_steps=100,
)
list_of_monitors_and_hooks = [validation_monitor]
hooks = monitor_lib.replace_monitors_with_hooks(list_of_monitors_and_hooks, est)
est.train(
    input_fn=input_fn_train,
    steps=1000,
    hooks=hooks
)

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注