我想将L2正则化添加到自定义contrib.learn估算器中,我无法弄清楚如何轻松完成。
有没有办法将L2正则化添加到我忽略的现有估算器(例如DNNClassfier)中?
我能想到将L2规范添加到我的自定义估算器的唯一方法是编写一个新的头部并改变成本函数。但我想这个常见问题有一个更简单,更优雅的解决方案。有没有人有同样的问题?
编辑:我想我找到了解决方案。我可以使用gradient_clip_norm剪辑渐变。这样,梯度应该受全局L2范数的限制,基本上我有L2正则化。我的想法是否正确?答案 0 :(得分:1)
AFAIK,您不能在提供的估算工具上加入l1或l2规则化,例如tf.estimator.Estimator
和tf.contrib.learn.Estimator
的子类。尽管如此,您可以使用estimator
api创建自定义的tf.layers
,在此解释:https://www.tensorflow.org/extend/estimators。通过自定义estimator
,您可以应用正规化器。请参考以下答案:https://stackoverflow.com/a/44238354/4206988,使用tf.layers
api对权重进行正则化。像tf.layers.dense()
这样的函数有一个kernel_regularizer
字段,您可以在其中规范权重矩阵。
请注意,L2正则化与梯度范数裁剪不同。在范数裁剪中,对于感兴趣的参数的范数存在特定限制,而在L2正则化中,没有这样的限制,它是软约束。