使用tf.contrib.learn.Experiment的train_and_evaluate()时如何打印结果到屏幕
在tf.contrib.learn.Experiment的评估阶段打印模型输出
嘿,我来帮你搞定这个需求!当用tf.contrib.learn.Experiment的train_and_evaluate()函数时,要在评估环节把模型的输出(预测结果)打印到屏幕上,最灵活的方式是自定义SessionRunHook,把它绑定到评估流程里。下面是具体的实现步骤:
1. 定义自定义打印Hook
这个Hook会在评估的每个步骤中捕获模型的预测张量,并打印出来:
import tensorflow as tf class PrintEvalPredictionsHook(tf.train.SessionRunHook): def __init__(self, predict_tensor): # 传入要捕获的模型预测张量 self.predict_tensor = predict_tensor def before_run(self, run_context): # 告诉TensorFlow的Session要获取这个预测张量的值 return tf.train.SessionRunArgs(self.predict_tensor) def after_run(self, run_context, run_values): # 拿到预测结果并打印 current_preds = run_values.results print(f"【评估步骤】模型输出结果: {current_preds}")
2. 绑定Hook到EvalSpec
接下来,你需要把这个Hook添加到EvalSpec中,让评估流程执行时触发它:
假设你已经有了训练用的estimator,以及评估用的输入函数eval_input_fn:
# 获取模型的预测张量——你需要根据自己的模型结构调整张量名称 # 可以用 estimator.get_variable_names() 查看所有可用的张量名 predict_tensor = estimator.get_variable_value("predictions") # 替换成你模型的输出张量名 # 实例化自定义打印Hook print_pred_hook = PrintEvalPredictionsHook(predict_tensor) # 构建EvalSpec,把Hook加进去 eval_spec = tf.contrib.learn.EvalSpec( input_fn=eval_input_fn, hooks=[print_pred_hook], # 绑定自定义Hook steps=10, # 按需设置评估的步数 name="eval" ) # 构建TrainSpec(这部分你应该已经有了,这里贴出来完整流程) train_spec = tf.contrib.learn.TrainSpec( input_fn=train_input_fn, max_steps=1000 ) # 执行训练和评估 tf.contrib.learn.train_and_evaluate(estimator, train_spec, eval_spec)
额外提示
- 如果不确定模型输出张量的名字,可以运行
print(estimator.get_variable_names())来查看所有可访问的张量名称,找到对应的预测输出张量。 - 如果你想把预测结果保存下来而不只是打印,可以在Hook的
after_run方法里把current_preds存入一个列表或文件中。
内容的提问来源于stack exchange,提问作者Yanghoon
相关产品推荐
相关产品推荐

