最近我已经开始使用TensorBoard进行游戏了。首先,我只是想对损失函数进行几百步的简单可视化。为此,我想使用tf.contrib.summary
API。
我的代码除了有点烦人之外还可以工作-假设我要执行250个步骤的优化程序,并且要记录每一个步骤的损失,因此,我将执行类似的操作(一些代码段是缺少)。
graph = tf.Graph()
sess = tf.Session(graph=graph)
with sess.graph.as_default():
... # lines that define the computation graph as well as input dataset and predictions
global_step = tf.train.create_global_step()
rmse = tf.math.sqrt(tf.losses.mean_squared_error(labels=Y, predictions=Y_PRED))
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(rmse, global_step=global_step)
# create summary writer, tensor for recording scalar and initialize everything
summary_writer = tf.contrib.summary.create_file_writer(args.logdir, flush_millis=10 * 1000)
summaries = {}
with summary_writer.as_default(), tf.contrib.summary.always_record_summaries():
summaries["train_rmse"] = tf.contrib.summary.scalar("train/RMSE", rmse)
sess.run(tf.global_variables_initializer())
with summary_writer.as_default():
tf.contrib.summary.initialize(session=sess, graph=graph)
for i in range(250):
train_X_batch, train_Y_batch = # ... retrieve batch of data from dataset
sess.run(optimizer, feed_dict={X : train_X_batch, Y : train_Y_batch})
sess.run(summaries["train_rmse"], {X: train_X, Y: train_Y})
但是当我这样做之后,然后在张量板上可视化结果时,我的train_rmse
只记录了241次,而不是我使用tf.contrib.summary.always_record_summaries()
时记录的250次,对吗? (参见图片)。
此问题似乎与数据有关。当我在mnist数据集上尝试类似的事物并尝试以相同数量的步数记录一些标量时,记录的步数约为200。
我试图在tensorflow文档中找到答案,但没有成功。我还检查了诸如250个步骤没有足够数据的情况-这应该不是问题。
另一件事是,即使我使用record_summaries_every_n_global_steps(n)
调用,也会发生这种情况。例如,使用n = 5
调用它只会记录直到第215步的步骤。
有人可以帮我吗?