如何使用张量板将我的训练和验证准确性合并到一张图中

how to merge my training and validation accuracy in one graph using tensorboard

tensorboard 显示了每个步骤的训练和验证准确性的多个图表,我希望它在单个图表上显示两个准确性的变化。

def accuracy(predictions, labels):
 return (100.0 * np.sum(np.argmax(predictions, 1) == np.argmax(labels, 1))
      / predictions.shape[0])

num_steps = 20000
with tf.Session(graph = graph) as session:
  tf.global_variables_initializer().run()
  print(loss.eval())    
  summary_op = tf.summary.merge_all()
  summaries_dir = '/loggg/'
  train_writer = tf.summary.FileWriter(summaries_dir, graph)
  for step in range(num_steps):
    _,l, predictions = session.run([optimizer, loss, predict_train])

    if (step % 2000 == 0):
          #print(predictions[3:6])                
          print('Loss at step %d: %f' % (step, l))
          training = accuracy( predictions, y_train[:, :])
          validation = accuracy(predict_valid.eval(), y_test)
          print('Training accuracy: %.1f%%' % training)
          print('Validation accuracy: %.1f%%' % validation)
          accuracy_summary = tf.summary.scalar("Training_Accuracy", training)
          validation_summary = tf.summary.scalar("Validation_Accuracy", validation)                                        
          Result = session.run(summary_op)
          train_writer.add_summary(Result, step)
          train_writer.close()

结果 tensorboard 图像显示不同图表上的多种训练和验证准确性

我不完全理解你的代码,但我是这样做的:

...
correct_predict=tf.equal(tf.argmax(logits,1),tf.argmax(y,1))
accuracy=tf.reduce_mean(tf.cast(correct_predict,tf.float32))
tf.summary.scalar("acc", accuracy)
...
write_op = tf.summary.merge_all()
...
with tf.Session() as sess:
    writer = tf.summary.FileWriter("graph/", sess.graph)
    ...
       if step%10==0:
           summ=sess.run(write_op,feed_dict={x:x_test,y:y_test})
           writer.add_summary(summ,step)
           writer.flush()

每次调用 tf.summary.scalar() 都会在图中定义一个新的操作,因此由于您是在训练循环中调用它,因此每次迭代都会生成一个不同的摘要操作,每个操作都有不同的 _1 , _2, 等后缀,这导致 TensorBoard 中有许多不同的图。

如果您刚刚起步,我建议您试用 Keras API 或使用 eager execution,这两者都可以更轻松地避免此问题。

如果您需要显式使用图形 + 会话模型,则应预先构建整个图形,包括精度计算(转换为 TensorFlow 操作,而不是 numpy),tf.summary.scalar() 调用记录准确度,最后是 tf.summary.merge_all() 操作。然后在训练循环中你只会做 sess.run()writer.add_summary()writer.flush().