我试图在火车和评估时间的ML引擎实验中输出一些汇总标量 . tf.summary.scalar('loss', loss)
正在输出exporboard中相同图上的训练和评估的汇总标量 . 但是,我也试图在火车和评估时间输出其他指标,它们只在火车时间输出 . 紧接着 tf.summary.scalar('loss', loss)
的代码,但似乎不起作用 . 例如,以下代码仅输出TRAIN,但不输出EVAL . 唯一的区别是它们使用自定义精度功能,但它们适用于TRAIN
if mode in (Modes.TRAIN, Modes.EVAL):
loss = tf.contrib.legacy_seq2seq.sequence_loss(logits, outputs, weights)
tf.summary.scalar('loss', loss)
sequence_accuracy = sequence_accuracy(targets, predictions,weights)
tf.summary.scalar('sequence_accuracy', sequence_accuracy)
是否有任何意义为什么损失会在TRAIN和EVAL的张量板中绘制,而sequence_accuracy只会为TRAIN绘制?
这种行为是否与我收到的警告有关“每次运行发现多个元图事件 . 用最新事件覆盖元图 . ”?
1 回答
因为图中的
summary
节点只是一个节点 . 它仍然需要进行评估(输出protobuf字符串),并且该字符串仍然需要写入文件 . 它不是图表中train_op
的上游,即使它被评估,也不会写入文件,除非你在EstimatorSpec
中指定tf.train.SummarySaverHook作为你的一个training_chief_hooks
. 因为Estimator
类不假设您希望在训练期间进行任何额外评估,所以通常仅在EVAL阶段进行评估,并且您只需增加min_eval_frequency
或checkpoint_frequency
以获得更多评估数据点 .如果您真的想在培训期间记录摘要's how you' d请执行以下操作:
但最好只是增加你的eval频率并使用
tf.metrics.streaming_accuracy
获得精确度eval_metric_ops