Tensorflow 如何使用tensorboard将我的培训和验证准确性合并到一个图形中
tensorboard显示了每个步骤的训练和验证精度的多个图形,我希望它在单个图形上显示两个精度的变化Tensorflow 如何使用tensorboard将我的培训和验证准确性合并到一个图形中,tensorflow,tensorboard,Tensorflow,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 sessi
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()
我不完全理解您的代码,但我是这样做的:
...
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()
都会在图形中定义一个新的op,因此由于您在列车循环中调用它,每次迭代都会生成一个不同的摘要op,每个op都有不同的\u 1
、\u 2
等后缀,这会导致TensorBoard中出现许多不同的绘图
如果您刚刚开始,我建议您试用KerasAPI或使用急切执行,这两种方法都可以更容易地避免这个问题
如果需要显式地使用graph+会话模型,那么整个图应该提前构建,包括精度计算(转换为TensorFlow ops,而不是numpy)、记录精度的
tf.summary.scalar()
调用,最后是tf.summary.merge\u all()
op。然后在训练循环中,您只需执行sess.run()
、writer.add_summary()
、和writer.flush()
对tf.summary.scalar()
的每次调用都会在图中定义一个新的op,因此,既然您在训练循环中调用它,每次迭代都会生成一个不同的摘要op,每个op都有不同的\u 1
、\u 2
等后缀,这会在TensorBoard中生成许多不同的图
如果您刚刚开始,我建议您试用KerasAPI或使用急切执行,这两种方法都可以更容易地避免这个问题
如果需要显式地使用graph+会话模型,那么整个图应该提前构建,包括精度计算(转换为TensorFlow ops,而不是numpy)、记录精度的tf.summary.scalar()
调用,最后是tf.summary.merge\u all()
op。然后在训练循环中,您只需执行sess.run()
、writer.add\u summary()
、和writer.flush()