tensorflow - 历史词典的准确性与屏幕上打印的不同
问题描述
在 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
解决方案
我使用了您的 colab,并且能够重现您的问题。是的,这似乎是一个严重的错误。我在 CPU 和 GPU 模式下测试了代码,tf 2.0, 2.1, 2.3
没有任何问题。但是这个问题导致 intf 2.4
和tf-nightly
.
我建议您在TensorFlow GitHub中提出错误问题。并在这里和那里分享一个交叉链接,以便其他人可以关注更新。同时,您可以回滚到tf 2.3
. 但是,我没有检查callbacks.CSVLogger
最新版本中是否也存在一些问题,您也可以检查一下。
推荐阅读
- encryption - Generating secret tenant for Salesforce Shield encryption module using Openssl, BYOK
- python - Array to be reshaped
- visual-studio - Angular-cli 项目,托管在 Visual Studio Core 2.2 Web Api 项目中,随机编译失败
- ios - 在音频引擎输入节点上安装水龙头时出错
- api - 使用从 API 调用退回的电子邮件数据下载准确的电子邮件数据
- excel - 查找最后一行,擦除标题
- sql-server - 选择什么列来创建聚集索引
- ios - TableViewCell 不显示我设置为约束的高度
- powershell - Docker dotnet 运行端口未映射,Windows 10 主机,Linux 容器
- wpf - 如何让 JAWS 屏幕阅读器按顺序读取 wpf 应用程序中的元素?