您能解释一下每次迭代中的keras输出吗?

时间:2018-12-13 09:12:17

标签: python machine-learning keras deep-learning

当我使用 fit_generator 方法使用keras训练顺序模型时,会看到此输出

  

第1 / N_epochs

     

n / N [===================> ..............]-ETA xxxx-损失:yyyy

我注意到损失与预期的一样随着步数逐渐减少。我的问题是,我还注意到,当一个纪元完成而另一个纪元开始时,损失的价值与我在上一个纪元末期看到的损失完全不同。

为什么呢?我认为历元和每个历元的步数是任意值,例如,使用10历元和1000步应该与1000历元和10步相同。但是在Keras 2.0中,一个纪元与下一个纪元之间究竟发生了什么?

免责声明:我知道纪元的定义以及如何使用批处理生成器确定步骤数,但是我的数据太多,因此无法应用此规则。

3 个答案:

答案 0 :(得分:1)

Keras计算的时期损失是在线累积和估算的。因此,它包括不同权重更新后模型的损失。

让我们用一个简单的例子来澄清一下:假设模型只是在改进(每次权重更新都会导致更好的准确性和损失),并且每个纪元都包含2个权重更新(每个最小批量是训练的一半)数据集。)

在纪元X,处理第一个小批量,结果是损失分数2.0。 更新权重后,模型将运行其第二个微型批次,其损失得分为1.0(仅对于微型批次)。但是您会看到损失从2.0更改为1.5(所有数据集的平均值)。

现在我们开始纪元X + 1,但是它发生在另一个权重更新之后,导致在第一个小批量生产中损失0.8,显示给您。依此类推...

在训练过程中会发生同样的事情,只是很明显,并不是所有的改变都是积极的。

答案 1 :(得分:0)

由于一个原因,第一次和第二次之间的损失值不同:

启动纪元时的初始化程序是随机的。因此,在第一个和第二个时期之间没有连续性。

这使您避免陷入局部最小值,然后使用不同的权重值获得最小损失。

您可以为每个图层调整此参数。

您有零,一,常数,随机法线,随机均匀,lecun,glorot,Xavier&He ..

在这里查看文档:

https://keras.io/initializers/ :)

答案 2 :(得分:0)

据我所知,keras函数的输出是运行平均损失,并且损失在时期开始时要比结束时大得多。在每个时期都将重置损失,并形成新的运行平均值。因此,旧的移动平均值比下一个时期的开始损失要高(或至少不同)。