代码之家  ›  专栏  ›  技术社区  ›  Jonathan

为什么L2正则化没有加入到原始损失函数中?

  •  2
  • Jonathan  · 技术社区  · 6 年前

    我知道,当使用Kernal Regularizer时,尤其是l2丢失时,我应该将其重新添加到丢失函数中,这就是在其他文章中所做的。然而,在喀拉什,他们没有遵循这个过程。为什么会这样?

    例如,考虑 this this 笔记本。他们在某些层中使用L2损耗作为内核正则化器,但并没有添加回原始损耗。这是因为特定的损失,还是仅仅是喀拉斯人的行为,还是我完全误解了一切?

    2 回复  |  直到 6 年前
        1
  •  4
  •   nessuno    6 年前

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

    你用的是 Model 抽象:这个模型包含了关于体系结构和培训过程的所有必需信息。

    当您调用该方法时 compile train train_on_batch 您可以指定损失函数,但在引擎盖下会发生以下情况:

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

    您可以看到将要添加到loss term的操作访问属性 .losses 模型实例(这是一个TensorFlow操作列表,通常是所有多应用程序操作,因为正则化在for中 regularization_strenght * norm_p(variable) .

        2
  •  1
  •   Mark.F    6 年前

    角膜中的L2正则化(或任何重量正则化)仍然以您期望的方式添加到损失函数中。它只是在幕后发生,所以用户不必担心。

    您链接的笔记本是在Keras中使用重量规则化的正确方法。