我正在keras
中训练一个模型,并试验输入的数据量如何影响最终的准确性。我注意到了一些有趣的东西。
training samples: 5076
epoch 1: 142s
epoch 2: 60s
epoch 3: 61s
epoch 4: 60s
epoch 5: 61s
training samples: 10242
epoch 1: 277s
epoch 2: 131s
epoch 3: 131s
epoch 4: 132s
epoch 5: 131s
training samples: 15678
epoch 1: 385s
epoch 2: 323s
epoch 3: 167s
epoch 4: 168s
epoch 5: 168s
training samples: 20691
epoch 1: 577s
epoch 2: 440s
epoch 3: 273s
epoch 4: 274s
epoch 5: 274s
我的直觉是每个纪元应该花费大致相同的时间。
我注意到训练集较小时,第一个历时比随后的历时更长。我以为这是因为我编写了自己的数据加载器,并且在第一个时期发生了一些“加速”。但是,对于更大的训练集,我注意到第二个时期也比随后的时期花费了更长的时间。
为什么较早的时期需要更长的时间?在较早的运行中是否还会更新更多权重?
答案 0 :(得分:1)
我能想到的最简单,最直观的原因是早期时期要比后期时期花费更多,这是因为对于您的早期时期,分类/回归系统的错误在开始时就非常高(这是很自然的事情,权重),因此有大量的梯度可以向后传播,并且可以更新许多权重。
可能是您的模型拟合训练数据的速度过快(大约2个纪元),后一个纪元仅更新了较小比例的权重,因为大多数梯度现在为0。这可能导致每个时期的训练时间更少。
尝试为每个时期输出平均精度甚至更好的梯度矩阵,并检查上述假设。
答案 1 :(得分:1)
在第一个时期中额外的时间可能是由于构建用于训练的计算图部分的编译开销。
关于第二个时代,这有点棘手。我认为这可能与优化器升级渐变的方式有关。例如,我见过有人提到将beta_1
优化器将0.9
的值从0.99
增加到adam
有时会缩短历时。
此外,如果您的模型能够快速拟合数据,则意味着更新更少,因此执行速度更快。但这对于您的情况似乎不太可能,因为您似乎仅在增加训练样本量时才遇到问题。