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

时间:2016-05-08 16:57:45

标签: machine-learning neural-network tensorflow

如何在TensorFlow训练dropout神经网络时实际使用的辍学率的准确性和成本?

正如预期的那样,每次我运行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 个答案:

答案 0 :(得分:2)

问题出在哪里?如果您拨打随机网络三次,应该获得三个不同的值。当您从网络记录损失时,您正在记录训练期间实际使用的损失。基本上你可以从你的计算图中读出值,比如:

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

将打印在训练步骤中计算的损失(它不会计算两次,因此不会重新采样丢失输出掩码)。

如果您想要看到"如果我现在停止学习,那么列车组的准确度是多少?#34;你需要一个 eval graph https://www.tensorflow.org/versions/r0.8/tutorials/mnist/tf/index.html#evaluate-the-model,它会告诉你的网络,是时候将辍学单位从随机变化到缩放/平均结果了。