我根据TensorFlow(v1.10)的colab进行了自定义估算(请参见此guide)。
我用以下方法训练了玩具模型:
tf.estimator.train_and_evaluate(est, train_spec, eval_spec)
然后,使用一些测试集数据,尝试使用以下方法评估模型:
test_fn = lambda: input_fn(DATASET['test'], run_params)
test_res = est.evaluate(input_fn=test_fn)
(其中train_fn
和valid_fn
在功能上与test_fn
相同,例如足以使tf.estimator.train_and_evaluate
工作)。
我希望会发生一些事情,但这是我得到的:
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2018-11-09-13:38:44
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from ./test/model.ckpt-100
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
然后它会永远运行。
怎么来?
答案 0 :(得分:6)
这是因为您无限期地重复数据集:
# In input_fn
dataset = dataset.repeat().batch(batch_size)
默认情况下,estimator.evaluate()运行,直到input_fn引发输入结束异常。因为您可以无限期地重复测试数据集,所以它永远不会引发异常并保持运行。
您可以在测试时删除重复项,也可以使用原始“ eval_spec”中使用的“ steps”参数对给定数量的步骤运行评估。