我们是否需要将正则化损失添加到张量流模型中的总损失中?

时间:2017-10-07 00:44:47

标签: tensorflow

在模型定义中,我使用kernel_regularizer=tf.contrib.layers.l2_regularizer(scale=0.00001)进入tf.layers.conv2d()来规范每个卷积层中的卷积核。

我的问题是:要计算某些批量输入的整个网络的总损失,我们是否需要手动添加正则化损失,如下所示:

reg_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
reg_constant = 0.01  # Choose an appropriate one.
loss = my_normal_loss + reg_constant * sum(reg_losses)

如果是,如何确定上面的reg_constantscalereg_constant之间的关系是什么?感谢。

1 个答案:

答案 0 :(得分:2)

你是对的。

从技术上讲,您不需要reg_constant。您可以通过scale参数控制每个图层的正则化,这对于所有图层都可以是相同的。在这种情况下,您只需设置reg_constant=1

使用reg_constant的唯一优势我看到scale,将正则化损失乘以reg_constant,可能是您的代码的可读性。

如果您使用标准架构,我建议首先设置reg_constant=1并将scale设置为一些小标量,例如0.001。如果你有资源,更好的方法是应用网格搜索来找到经验上最小化验证损失的值,即[0.0001,0.1]。

如果您怀疑应该专门规范化的图层,则可以按照第一种情况仅将特定图层scale设置为不同的值。像以前一样在两个不同的比例值上应用网格搜索。