python - TensorFlow 版本(2.1.0 和 2.4.0)之间的准确率和损失显着降低
问题描述
我正在测试我的 DenseNet-121 实现是否可以在 Ubuntu 上的 GPU (RTX 2060) 上运行,但是当它成功运行时,我观察到损失和准确性的表现明显低于使用不同计算机在 CPU 上设置的性能。
我使用相同的代码进行模型和数据准备、相同的数据集和相同的训练参数。
唯一不同的是,令人满意的 macOS CPU 版本运行在 TensorFlow 版本 2.1.0 上,而 Ubuntu GPU 版本运行在 TensorFlow 版本 2.4.0 上。
为了找出唯一可观察到的差异,我使用了 macOS 版本并将 TensorFlow 更新到 2.4.0 版本,现在我记录的结果与在其他设备上一样明显更差。
1 epoch 后的 TensorFlow 版本 2.1.0:
593/593 [==============================] - 733s 1s/sample - loss: 0.3325 - accuracy: 0.8650
1 epoch 后的 TensorFlow 版本 2.4.0:
38/38 [==============================] - 823s 21s/step - loss: 0.3732 - accuracy: 0.3920
*这里最明显的是新 2.4.0 和 2.1.0 之间相同过程的准确度差异为 0.473。
有谁知道为什么会出现这个问题?最简单的解决方案是否只是回到上一个 TensorFlow 版本并获得令人满意的结果?
先感谢您!
解决方案
我注意到,在一种情况下,每个 epoch 有 593 步,而在另一种情况下,每个 epoch 只有 38 步。如果这两种情况下的批大小相同,那么只有 38 个步骤,您并没有处理所有的训练样本。事实上,您只处理了 3800/593=6.4% 的样本。这当然会导致精度上的不同结果。
推荐阅读
- sql - 使用 T-SQL 处理不同模型的每日不同销售额
- javascript - 每次在 socket.io 上都越来越多地重复该过程
- mysql - Sequelize:如何急切加载,带有关联,原始:true?
- javascript - 如何提及使用 Chat Discord.JS 发送消息的用户?
- python - 如何修改它以从右到左读取并提取行?而不是从左到右阅读
- python - 如何按词频迭代列表和分组
- flutter - 设置为全屏模式时,Flutter 容器不会覆盖整个屏幕
- java - 为什么我的战争文件仍然复制和提取但没有在 tomcat docker 容器中运行
- javascript - 在 Gatsby 中获取目标路径
- php - Laravel 使用单个表单将数据插入到多个关系表中