我没有在任何地方找到这个;我无法完全理解如何在Tensorboard中添加标量摘要,所以我决定制作一个我认为最基本的例子,一条线。这是我的代码:
import tensorflow as tf
import numpy as np
x = tf.Variable(0, dtype=tf.float32)
tf.summary.scalar("X", x)
init = tf.global_variables_initializer()
with tf.Session() as sess:
writer = tf.summary.FileWriter('./logs', sess.graph)
sess.run(init)
for i in range(1, 11):
merge = tf.summary.merge_all()
x = tf.add(x, 1)
summary, x = sess.run([merge, x])
writer.add_summary(summary, i)
print("X = ", x)
无论我试图改变什么,当我打开Tensorboard时,标量摘要保持为0。也许我不明白摘要是什么?也许我弄错了?老实说,我不知道。关于Tensorboard摘要的任何可靠文档也将非常受欢迎。谢谢。
x = tf.add(x, 1)
意味着现在一个python variablex
将引用一个新的Tensor,其值比之前的Tensor x
大1。所以在第3行中创建的变量 - 比如Variable:0
---将保持不变并且不会更新,其值仍为0.您在每个循环步骤中创建一个新的张量。由于摘要仍然是指变量Variable:0
,其值始终为0,而不是x
,因此产生的行为是正确的。
你应该这样做:
import tensorflow as tf
import numpy as np
x = tf.Variable(0, dtype=tf.float32)
tf.summary.scalar("X", x)
increment_op = x.assign_add(1) # <------- here
summary_op = tf.summary.merge_all() # <------- watch this too
init = tf.global_variables_initializer()
with tf.Session() as sess:
writer = tf.summary.FileWriter('./logs', sess.graph)
sess.run(init)
for i in range(1, 11):
summary, x = sess.run([summary_op, increment_op]) # <----- here
writer.add_summary(summary, i)
print("X = ", x)
另外,请确保在循环期间不创建不必要的张量(例如合并摘要)。所以在飞行中创建tf.summary.merge_all()
也是错误的。