我试图在Tensorflow中的同一脚本,同一图形,同一会话中进行神经网络的训练和测试。我读到有可能,但是,当我查看培训和测试操作的准确性/损失结果时,似乎这两个操作都只是某种程度上延续了培训过程。例如。 train.acc。将以0.84结束纪元,然后测试将以0.84开始,以0.87结束,然后训练将以acc重新开始。的0.87 ...
我的代码是这样构造的:
1)定义累加和损失计算
calc_loss = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits)
acc, acc_op = tf.metrics.accuracy(labels=labels, predictions=predictions)
loss = tf.metrics.mean(calc_loss)
2)在同一个tf.session中运行上述内容,例如对于acc:
acc_value, acc_op_value = sess.run([acc, acc_op], feed_dict=feed_dict_train)
test_acc_value, test_acc_op_value = sess.run([acc, acc_op], feed_dict=feed_dict_test)
两个词典包含不同的数据。 我的问题是,我是否需要为培训和测试定义不同的操作-培训和测试混在一起吗?还是不可能一次训练和训练?有什么干净简单的方法可以解决此问题?指向说明该问题的代码示例的链接也将有所帮助(因为我没有设法找到任何可以直接回答我的问题的东西)。
答案 0 :(得分:1)
tf.metrics中的指标是有状态的;它们创建变量以累积部分结果,因此您不应期望它们会自动重置。而是使用tf.contrib.metrics
或tf.keras.metrics
中的指标并进行会话。运行操作以相应地重置它们。