在模型定义中,我使用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_constant
? scale
和reg_constant
之间的关系是什么?感谢。
答案 0 :(得分:2)
你是对的。
从技术上讲,您不需要reg_constant
。您可以通过scale
参数控制每个图层的正则化,这对于所有图层都可以是相同的。在这种情况下,您只需设置reg_constant=1
。
使用reg_constant
的唯一优势我看到scale
,将正则化损失乘以reg_constant
,可能是您的代码的可读性。
如果您使用标准架构,我建议首先设置reg_constant=1
并将scale
设置为一些小标量,例如0.001。如果你有资源,更好的方法是应用网格搜索来找到经验上最小化验证损失的值,即[0.0001,0.1]。
如果您怀疑应该专门规范化的图层,则可以按照第一种情况仅将特定图层scale
设置为不同的值。像以前一样在两个不同的比例值上应用网格搜索。