我可以在每一个全球步骤中获得遗失。但我确实想在张量板中添加图表'lossxx'中的评估损失。怎么做?
class MyHook(tf.train.SessionRunHook): def after_run(self,run_context,run_value): _session = run_context.session _session.run(_session.graph.get_operation_by_name('acc_op')) def my_model(features, labels, mode): ... logits = tf.layers.dense(net, 3, activation=None) predicted_classes = tf.argmax(logits, 1) if mode == tf.estimator.ModeKeys.PREDICT: predictions = { 'class': predicted_classes, 'prob': tf.nn.softmax(logits) } return tf.estimator.EstimatorSpec(mode, predictions=predictions) # Compute loss. loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits) acc, acc_op = tf.metrics.accuracy(labels=labels, predictions=predicted_classes) tf.identity(acc_op,'acc_op') loss_sum = tf.summary.scalar('lossxx',loss) accuracy_sum = tf.summary.scalar('accuracyxx',acc) merg = tf.summary.merge_all() # Create training op. if mode == tf.estimator.ModeKeys.TRAIN: optimizer = tf.train.AdagradOptimizer(learning_rate=0.1) train_op = optimizer.minimize(loss, global_step=tf.train.get_global_step()) return tf.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op, training_chief_hooks=[ tf.train.SummarySaverHook(save_steps=10, output_dir='./model', summary_op=merg)]) return tf.estimator.EstimatorSpec( mode, loss=loss, eval_metric_ops={'accuracy': (acc, acc_op)} ) classifier.train(input_fn=train_input_fn, steps=1000,hooks=[ MyHook()])
答案 0 :(得分:3)
实际上,您不需要自己创建SummarySaverHook
,因为它已经包含在tf.estimator.Estimator
中。只需使用tf.summary.xxx
创建所需的所有摘要,它们就会在每个n
步骤中进行评估。 (有关详情,请参见tf.estimator.RunConfig
。
此外,您无需为最终损失loss
创建摘要。这也会自动为您创建。如果您这样做,培训和评估摘要将显示在TensorBoard的同一张图中。估算器在您当前的eval
中创建一个子目录model_dir
来实现此目的。
还有一个小提示:在摘要中直接使用acc_op
来更新指标 并获取其值。但是,tf.metrics
函数很难处理;-)
答案 1 :(得分:0)
您需要使用tf.estimator.train_and_evaluate