当我使用 fit_generator 方法使用keras训练顺序模型时,会看到此输出
第1 / N_epochs
n / N [===================> ..............]-ETA xxxx-损失:yyyy
我注意到损失与预期的一样随着步数逐渐减少。我的问题是,我还注意到,当一个纪元完成而另一个纪元开始时,损失的价值与我在上一个纪元末期看到的损失完全不同。
为什么呢?我认为历元和每个历元的步数是任意值,例如,使用10历元和1000步应该与1000历元和10步相同。但是在Keras 2.0中,一个纪元与下一个纪元之间究竟发生了什么?
免责声明:我知道纪元的定义以及如何使用批处理生成器确定步骤数,但是我的数据太多,因此无法应用此规则。
答案 0 :(得分:1)
Keras计算的时期损失是在线累积和估算的。因此,它包括不同权重更新后模型的损失。
让我们用一个简单的例子来澄清一下:假设模型只是在改进(每次权重更新都会导致更好的准确性和损失),并且每个纪元都包含2个权重更新(每个最小批量是训练的一半)数据集。)
在纪元X,处理第一个小批量,结果是损失分数2.0。 更新权重后,模型将运行其第二个微型批次,其损失得分为1.0(仅对于微型批次)。但是您会看到损失从2.0更改为1.5(所有数据集的平均值)。
现在我们开始纪元X + 1,但是它发生在另一个权重更新之后,导致在第一个小批量生产中损失0.8,显示给您。依此类推...
在训练过程中会发生同样的事情,只是很明显,并不是所有的改变都是积极的。
答案 1 :(得分:0)
由于一个原因,第一次和第二次之间的损失值不同:
启动纪元时的初始化程序是随机的。因此,在第一个和第二个时期之间没有连续性。
这使您避免陷入局部最小值,然后使用不同的权重值获得最小损失。
您可以为每个图层调整此参数。
您有零,一,常数,随机法线,随机均匀,lecun,glorot,Xavier&He ..
在这里查看文档:
答案 2 :(得分:0)
据我所知,keras函数的输出是运行平均损失,并且损失在时期开始时要比结束时大得多。在每个时期都将重置损失,并形成新的运行平均值。因此,旧的移动平均值比下一个时期的开始损失要高(或至少不同)。