如何查看使用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 回答
问题出在哪里?如果您将随机网络调用三次,则 should 会获得三个不同的值 . 当您从网络记录损失时,您将记录在培训期间实际使用的损失 . 基本上你可以从你的计算图中读出值,比如:
这将打印计算出的损失 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,这将告诉你的网络,是时候将丢失单位从随机变换到缩放/平均结果了 .