张量板为每个步骤显示了多个用于训练和验证精度的图形,我希望它在单个图形上显示两个精度的变化。
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()
结果 张量板图像显示不同图上的多种训练和验证准确性
答案 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()
。