总结,tensorflow,评估时要提供哪些数据?

时间:2018-03-23 09:53:59

标签: python tensorflow neural-network conv-neural-network tensorboard

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)然后绘制它并研究它的演变,是每个时期的平均成本(我假设,比每个小批量的成本更准确地衡量成本。

我认为喂养整个训练数据不是解决方案,但我有点混淆为什么在评估摘要时只提供一批训练数据。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

在tensorflow中,如果您希望在整个数据集上平均成本,则需要使用指标,而不是摘要。有关如何使用它们的更多信息,请查看tf指标的文档。