我注意到 weight_regularizer 在Keras中不再可用,取而代之的是活动和内核正规化器。 我想知道:
答案 0 :(得分:64)
活动正则化器作为网络输出的函数起作用,主要用于规范隐藏单元,而weight_regularizer,正如其名称所说,对权重起作用,使它们衰减。基本上,您可以将正则化损失表示为输出(activity_regularizer
)或权重(weight_regularizer
)的函数。
新kernel_regularizer
取代weight_regularizer
- 虽然文档中的内容不是很清楚。
从kernel_regularizer
:
kernel_regularizer:应用的正则化函数
kernel
权重矩阵 (见规范者)。
activity_regularizer
:
activity_regularizer:应用规则化程序功能 图层的输出(“激活”)。 (见规范者)。
重要编辑:请注意, activity_regularizer 中存在仅在Keras版本2.1.4中修复的错误(至少使用Tensorflow后端)。实际上,在旧版本中,活动正则化函数应用于图层的输入,而不是应用于输出(图层的实际激活,如预期)。因此,如果您使用的是较旧版本的Keras(在2.1.4之前),请注意活动正则化可能无法按预期工作。
您可以在GitHub
上看到提交答案 1 :(得分:3)
这个答案有点晚了,但是对将来的读者很有用。 因此,正如他们所说,必要性是发明之母。我只在需要时才了解它。上面的答案并没有真正说明差异的原因,因为它们最终都会影响权重,因此惩罚权重本身或图层输出之间有什么区别?答案是:我遇到一种情况,网的权重很小且很好,介于[-0.3]到[+0.3]之间。所以,我真的不能惩罚他们,他们没有错。内核正则化器是没有用的。但是,该层的输出为HUGE,以100为单位。请记住,该图层的输入也很小,总是小于一。但是,这些较小的值与权重相互作用,从而产生大量的输出。在这里,我意识到我需要的是活动正则化器,而不是内核正则化器。这样,我要为那些较大的输出惩罚该层,我不在乎权重本身是否很小,我只是想阻止它达到这样的状态,因为这会饱和我的乙状结肠激活并导致大量其他麻烦,例如消失渐变和停滞。