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

如何查看在训练带有dropoutTensorFlow神经网络时实际使用的dropouts的准确性和成本?

正如预期的那样,每次我运行一个摘要时,例如使用

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

或者

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

如果网络包含dropout,并且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.80875.64675.770 

尽管这些值大致相同,但它们并不完全相同,可能是因为每次评估时,网络会丢弃不同的节点。因此,这必然导致我无法看到训练过程中实际遇到的成本。

如何记录或查看在训练带有dropout的TensorFlow神经网络时实际使用的成本(或其他使用网络计算的摘要值)?


回答:

问题出在哪里呢?你在调用三次随机网络时应该得到三个不同的值。当你记录网络的损失时,你记录的是训练过程中实际使用的损失。基本上,你可以直接从计算图中读取值,例如:

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

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

如果你想查看“如果我现在停止学习,训练集上的准确性会是什么”,你需要一个评估图 https://www.tensorflow.org/versions/r0.8/tutorials/mnist/tf/index.html#evaluate-the-model,它会告诉你的网络,现在是时候将dropout单元从随机切换到缩放/平均结果了。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注