为什么不将L2正则化添加回原始损失函数中?

时间:2018-12-30 08:38:55

标签: tensorflow keras neural-network computer-vision

我知道,当使用内核正则化器,尤其是l2 loss时,我应该将其重新添加到loss函数中,这是在其他帖子中所做的。但是,在Keras,他们没有遵循此过程。为什么会这样呢?

例如,考虑使用thisthis笔记本。他们在某些层级使用l2损失作为核心调节器,但并未加回到原始损失中。是因为特定的损失,还是仅仅是Keras遵循的行为?还是我完全误解了一切?

2 个答案:

答案 0 :(得分:5)

Keras隐藏了很多复杂性(这并不总是一件好事)。

您正在使用Model抽象:此模型在内部包含有关体系结构和培训过程的所有必需信息。

当调用方法compiletraintrain_on_batch时,您指定了损失函数,但实际上是这样:

  • 实例化指定的损失函数(例如,分类交叉熵)
  • 从模型中获取所应用的正则化并将其全部添加到先前实例化的损失项中

您可以看到要访问模型实例的属性.losses的损失项中要添加的操作(这是张量流操作的列表,通常是所有多重化操作,因为正则化位于为regularization_strenght * norm_p(variable)

答案 1 :(得分:1)

Keras中的L2正则化(或任何权重正则化)仍以与您期望的相同的方式添加到损失函数中。它只是在幕后发生,因此用户无需担心。

您链接的笔记本是在Keras中使用权重调整的正确方法。