小编Kir*_*iru的帖子

Keras 批量训练:训练损失是在每个优化步骤之前还是之后计算的?

这可能是一个非常基本的问题,但是我无法找到答案:当我使用 Keras 使用批处理训练网络时,控制台输出显示并不断更新训练集的当前损失值的显示每个训练时期。据我了解,该损失值是在当前批次上计算的(作为总体损失的代理),并且可能与为先前批次计算的损失值进行平均。但获取当前批次的损失值有两种可能:更新参数之前或之后。有人能告诉我这两个哪个是正确的吗?根据我的观察,我宁愿猜测它是在优化步骤之后。

我问这个问题的原因是:我正在训练一个网络,发现训练损失(两个嵌入的 MSE)会按预期减少(几个数量级),但验证损失保持不变。首先我认为这可能是由于过度拟合。因此,由于训练数据集相当大(200k 图像),我决定减小 epoch 大小,以便能够更频繁地看到验证集的评估,从而导致 epoch 小于trainingSetSize/batchSize。即使这样,我也看到训练损失从一个纪元到另一个纪元不断减少(验证损失仍然保持不变),我发现这非常有趣,因为网络仍然处于第一次看到训练数据的阶段。根据我的理解,这意味着我的设置中存在一些令人讨厌的错误,或者在采取优化步骤后显示了显示的训练损失。否则,新的、从未见过的批次和验证集的损失应该至少表现相似。

即使我假设损失是在每个优化步骤之后计算的:假设我的网络没有按照验证集评估的建议取得有用的进展,那么当看到新的、从未见过的批次时,它也应该表现得任意。然后,训练损失的整体减少将仅归因于优化步骤(这对于手头的批次非常有好处,但对于其他数据则不然,显然,这也是一种过度拟合)。这意味着,如果训练损失不断减少,每批的优化步骤就会变得更加有效。我正在使用 Adam 优化器,我知道它是自适应的,但是是否真的有可能看到训练损失持续大幅减少,而实际上网络没有学习任何有用的泛化?

python deep-learning keras loss-function

7
推荐指数
1
解决办法
1676
查看次数

标签 统计

deep-learning ×1

keras ×1

loss-function ×1

python ×1