tensorflow - TensorFlow 损失的初始跳跃
问题描述
假设我有一个保存的模型几乎是最低限度的,但还有一些改进的空间。例如,损失(由 tf.keras.Models.model.evaluate() 报告)可能是 11.390,我知道模型可以下降到 11.300。
问题在于,尝试改进此模型(使用 tf.keras.Models.model.fit())始终导致权重在第一个 epoch 期间接收到初始“颠簸”,这会将损失向上发送。在那之后,它开始减少,但并不总是收敛到正确的最小值(甚至可能不会回到它开始的地方。)
它看起来像这样:
tf.train.RMSPropOptimizer(0.0002):
0 11.982
1 11.864
2 11.836
3 11.822
4 11.809
5 11.791
(...)
15 11.732
tf.train.AdamOptimizer(0.001):
0 14.667
1 11.483
2 11.400
3 11.380
4 11.371
5 11.365
tf.keras.optimizers.SGD(0.00001):
0 12.288
1 11.760
2 11.699
3 11.650
4 11.666
5 11.601
具有 30M 观察值的数据集,在所有情况下批量大小为 500K。
我可以通过降低学习率来缓解这种情况,但是它需要永远收敛。
有什么办法可以防止训练一开始就“狂野”,又不影响长期收敛速度?
解决方案
推荐阅读
- excel - 属性进入所有元素
- django - Django 多个数据库外键
- c# - 如何获取 ListView 项目对其作为静态资源创建的数据模板 ViewModel 的引用?
- ios - 当前上下文视图控制器的编程屏幕截图
- mongodb - 通过将它们与参考进行比较来清理集合中的文档
- django-models - 日期过滤器不起作用,在日期之间进行过滤,从用户那里获取起始日期和截止日期
- android-viewpager - Androidx FragmentStatePagerAdapter - 无法为未附加到 FragmentManager 的 Fragment 设置MaxLifecycle
- python - 沿着numpy数组的一个轴随机保持一个不同于零的元素
- json - 尝试以 JSON 格式从 GitHub 按名称加载存储库列表
- javascript - JavaScript 函数。有人可以帮助或解释为什么它会记录 120 吗?根据我的分析,我看到 20