本文主要是介绍tf.estimator.train_and_evaluate() 训练与测试不一致,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题背景
以一个简单的分类任务为例,在处理完数据之后,使用如下code进行训练:
estimator = tf.estimator.Estimator(model_fn, 'model', cfg, params)
train_spec = tf.estimator.TrainSpec(input_fn=train_inpf, hooks=[])
eval_spec = tf.estimator.EvalSpec(input_fn=eval_inpf, throttle_secs=120)
tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)
在训练保存最后一次模型之后,同样的dev集,模型训练的结果,和重新使用tf.evaluation 函数测试的结果居然不一致!
而本质上,model_fn 中定义的测评函数就是estimator.evaluate()…
model_fn() 函数中定义的测评如下:
metrics = {'label_acc': tf.metrics.accuracy(real_label_ids, pred_label_ids)
}
for metric_name, op in metrics.items():tf.summary.scalar(metric_name, op[1])if mode == tf.estimator.ModeKeys.EVAL:return tf.estimator.EstimatorSpec(mode, loss=loss, eval_metric_ops=metrics)
这就比较诡异了
这篇关于tf.estimator.train_and_evaluate() 训练与测试不一致的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!