首页 > 解决方案 > Keras train_step 获取纪元数

问题描述

我已经构建了自己的 Keras 模型类,继承自 keras.Model。但是,我有一个修改过的训练步骤,我手动推导出前向传递并计算两个不同的损失,我将它们相加,这样我的总损失就是 total_loss = loss1 + factor*loss2。我观察到,如果我在训练期间减少该因素,我会得到更好的结果。我现在的问题是,这可能是一个好的解决方案。我可以以某种方式访问​​ train_step 方法中的纪元数,以便我可以从纪元数计算因子,还是有其他更好的方法?

多谢 :)

编辑:如果我在 train_step 方法中添加一个计数器,它在训练期间不会增加。但这仅在非急切模式下发生。如果我启用渴望模式,它就可以工作。关于如何使它在非急切模式下工作的任何想法?

标签: pythontensorflowkeras

解决方案


您可能会获得更好的结果,因为随着模型接近损失表面上的局部最小值,您正在减小步长。请注意下图中的减小步长如何帮助避免超出最小值。 在此处输入图像描述

实现这一点的一种常见方法是在列表中提前安排训练的学习率,您的模型根据 epoch 数访问当前因子,即 factor[epoch] loss2。但是,没有什么可以阻止您直接根据纪元数计算因子,例如 factor = numpy.e *(-epoch)。

但是,您使用两个损失来创建总损失的方法不是我以前见过的,您的模型中可能还有其他地方可以直接调整学习率,而不是通过调整损失间接进行调整。


推荐阅读