在Hands-on TensorBoard video by Dandelion Mané中,他在谈论收集一些摘要并将其写入磁盘时编写了以下代码:
#(... some code and some summaries...)
merged_summary = tf.summary.merge_all()
writer = tf.summary.FileWriter("/tmp/mnist_demo/3")
writer.add_graph(sess.graph)
for i in range(2001):
batch = mnist.train.next_batch(100)
if i % 5 == 0:
s = sess.run(merged_summary, feed_dict={x:batch[0], y: batch[1]})
writer.add_summary(s, i)
所以我从那里获取了我的代码的灵感,下面我展示了一个片段:
costs = [] # To keep track of the cost per epoch
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=Z5, labels=Y))
tf.summary.scalar('cost', cost)
for epoch in range(num_epochs):
minibatches_cost = 0
seed = seed + 1
minibatches_train = random_mini_batches(X_train, Y_train, minibatch_size, seed)
num_minibatches_train = len(minibatches_train)
for minibatch in minibatches_train:
# Select a minibatch
(minibatch_X, minibatch_Y) = minibatch
# Run the session to execute the optimizer and the cost, the feedict should contain a minibatch for (X,Y).
_ , minibatch_cost = sess.run([optimizer, cost], feed_dict={X:minibatch_X, Y:minibatch_Y})
minibatches_cost += minibatch_cost # Adding the cost per minibatch
epoch_cost = minibatches_cost / num_minibatches_train # Cost per epoch
if print_cost == True and epoch % 5 == 0: # Print the cost
print ("Cost after epoch %i: %f" % (epoch, epoch_cost))
print ("Time elapsed: %i" % t_elapsed)
if epoch % 1 == 0: # Append the cost
costs.append(epoch_cost)
if epoch % 1 == 0: # Write summaries
summary_str = merged_summary.eval(feed_dict={X:minibatch_X, Y:minibatch_Y})
file_writer.add_summary(summary_str, epoch)
我的问题是,在评估merged_summary 时,我是否正在向会话提供正确的数据,因为我现在这样做的方式,将在摘要中写入磁盘的成本是一个小批量的成本(实际上是最后一个小批量,用random_mini_batches生成),而我在成本变量中保存的每个时期的成本(代码中的epoch_cost)然后绘制它并研究它的演变,是每个时期的平均成本(我假设,比每个小批量的成本更准确地衡量成本。
我认为喂养整个训练数据不是解决方案,但我有点混淆为什么在评估摘要时只提供一批训练数据。
感谢您的帮助
答案 0 :(得分:0)
在tensorflow中,如果您希望在整个数据集上平均成本,则需要使用指标,而不是摘要。有关如何使用它们的更多信息,请查看tf指标的文档。