如何记录或查看使用Dropout训练TensorFlow神经网络时使用的成本?

如何查看使用dropout训练TensorFlow神经网络时实际使用的丢失的准确性和成本?

正如所料,每次我运行summary,例如同

train_writer.add_summary(sess.run(merged, feed_dict=foo), step)

要么

print(sess.run(accuracy, feed_dict=foo))

如果网络包含丢失,并且 foo 提供1.0以外的“保持概率”,我将获得不同的值,例如,每次我得到不同的损失或准确度 - 例如,三次立即连续计算准确性

print(sess.run(accuracy, feed_dict=foo))
print(sess.run(accuracy, feed_dict=foo))
print(sess.run(accuracy, feed_dict=foo))

可能会有类似的东西

75.808
75.646
75.770

虽然它们大致相同,但它们并不完全相同,可能是因为每次评估时,网络都会丢弃不同的节点 . 这样做的结果必定是我从未看到培训中实际遇到的成本 .

如何记录或查看实际用于训练具有丢失的TensorFlow神经网络的成本(或使用网络计算的其他汇总值)?

回答(1)

2 years ago

问题出在哪里?如果您将随机网络调用三次,则 should 会获得三个不同的值 . 当您从网络记录损失时,您将记录在培训期间实际使用的损失 . 基本上你可以从你的计算图中读出值,比如:

for i in range(100):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
    _, loss_val = sess.run([train_step, cross_entropy],
                           feed_dict={x: batch_xs, y_: batch_ys})
    print 'loss = ' + loss_val

这将打印计算出的损失 during training step (它不会计算两次,因此不会重新采样丢失输出掩码) .

如果你想要看到"what would be the accuracy on train set if I stop learning now",你需要一个 eval graph https://www.tensorflow.org/versions/r0.8/tutorials/mnist/tf/index.html#evaluate-the-model,这将告诉你的网络,是时候将丢失单位从随机变换到缩放/平均结果了 .