首页 > 解决方案 > 历史词典的准确性与屏幕上打印的不同

问题描述

在 Keras 中训练模型时,每个 epoch 显示在屏幕上的准确度与历史对象中保存的准确度不同。例如(最小测试,压缩输出):

history = model.fit(...)

Epoch 1/5
156/156 [===] - loss: 0.6325 - accuracy: 0.7700 - val_loss: 0.4330 - val_accuracy: 0.8156
Epoch 2/5
156/156 [===] - loss: 0.3855 - accuracy: 0.8538 - val_loss: 0.4692 - val_accuracy: 0.8050
Epoch 3/5
156/156 [===] - loss: 0.3918 - accuracy: 0.8427 - val_loss: 0.4666 - val_accuracy: 0.7861
Epoch 4/5
156/156 [===] - loss: 0.3820 - accuracy: 0.8461 - val_loss: 0.4101 - val_accuracy: 0.8014
Epoch 5/5
156/156 [===] - loss: 0.3927 - accuracy: 0.8492 - val_loss: 0.4092 - val_accuracy: 0.7979


然后(为方便起见,像打印值一样四舍五入):

>>> [round(x, 4) for x in history.history['accuracy']]
[0.8184, 0.8474, 0.8484, 0.8488, 0.8476]
>>> [round(x, 4) for x in history.history['val_accuracy']]
[0.8156, 0.805, 0.7861, 0.8014, 0.7979]

如您所见,虽然验证准确度与打印值匹配,但训练准确度不匹配(使用 Keras 2.4.0 和 TensorFlow 2.4.1 在带 GPU 的 Colab 和带 CPU 的本地 PC 中测试)。

例如,如果您想将来自多个测试的数据保存到一个文件中,这将是一个问题。我怎么了?

编辑:这是一个重现问题的示例,从 TF MNIST 快速入门稍作修改。调用后立即查看块model.fit()https://colab.research.google.com/drive/14Uogeq8wRlZlinaKLbkFr_Bl2aLzUJuy?usp=sharing

编辑 2:根据另一位用户的建议,我在这里提交了一个错误问题:https ://github.com/tensorflow/tensorflow/issues/48408

标签: tensorflowkerasneural-network

解决方案


我使用了您的 colab,并且能够重现您的问题。是的,这似乎是一个严重的错误。我在 CPU 和 GPU 模式下测试了代码,tf 2.0, 2.1, 2.3 没有任何问题。但是这个问题导致 intf 2.4tf-nightly.

我建议您在TensorFlow GitHub中提出错误问题。并在这里和那里分享一个交叉链接,以便其他人可以关注更新。同时,您可以回滚到tf 2.3. 但是,我没有检查callbacks.CSVLogger最新版本中是否也存在一些问题,您也可以检查一下。


推荐阅读