在 Tensorflow 中同时训练和测试
Simultaneous training and testing in Tensorflow
我正在尝试在 Tensorflow 中使用同一个脚本、同一个图表、同一个 session 对神经网络进行训练和测试。我读到这是可能的,但是当我查看训练和测试操作的 accuracy/loss 结果时,似乎这两个操作都只是训练过程的延续。例如。 train.acc。将在 .84 结束纪元,然后测试将从 0.84 开始,在 0.87 结束,然后训练将以 acc 恢复。的 0.87...
我的代码是这样构造的:
1) 定义 acc 和 loss 的计算
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)
这两个词典包含不同的数据。
我的问题是,我是否需要为训练和测试定义不同的操作——这是训练和测试混淆的地方吗?还是无法在一个 session 中进行测试和训练?什么是一种干净简单的方法来解决这个问题? link 代码示例说明了这一点也会有所帮助(因为我无法找到任何直接回答我问题的东西)。
tf.metrics 中的指标是有状态的;他们创建变量来累积部分结果,因此您不应该期望它们会自动重置。而是使用 tf.contrib.metrics
或 tf.keras.metrics
中的指标和 session.run 操作来相应地重置它们。
我正在尝试在 Tensorflow 中使用同一个脚本、同一个图表、同一个 session 对神经网络进行训练和测试。我读到这是可能的,但是当我查看训练和测试操作的 accuracy/loss 结果时,似乎这两个操作都只是训练过程的延续。例如。 train.acc。将在 .84 结束纪元,然后测试将从 0.84 开始,在 0.87 结束,然后训练将以 acc 恢复。的 0.87...
我的代码是这样构造的:
1) 定义 acc 和 loss 的计算
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)
这两个词典包含不同的数据。 我的问题是,我是否需要为训练和测试定义不同的操作——这是训练和测试混淆的地方吗?还是无法在一个 session 中进行测试和训练?什么是一种干净简单的方法来解决这个问题? link 代码示例说明了这一点也会有所帮助(因为我无法找到任何直接回答我问题的东西)。
tf.metrics 中的指标是有状态的;他们创建变量来累积部分结果,因此您不应该期望它们会自动重置。而是使用 tf.contrib.metrics
或 tf.keras.metrics
中的指标和 session.run 操作来相应地重置它们。