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

时间:2019-02-21 12:29:14

标签: tensorflow 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()

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

2 个答案:

答案 0 :(得分:0)

我不完全了解您的代码,但我这样做是这样的:

Class

答案 1 :(得分:0)

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

如果您刚刚入门,建议您尝试使用Keras API或使用急切的执行方式,这两种方式都可以更轻松地避免此问题。

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