2017-10-07 21 views
1

在模型定义中,我使用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以上? scalereg_constant之间有什么关系?谢谢。

回答

2

你说得对。

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

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

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

如果您怀疑应该特别调整图层,则可以按照第一种情况设置特定图层scale以获取不同的值。像以前一样对这两个不同的比例值应用网格搜索。

+0

嗨,非常感谢您的回答!是的,如果我理解正确,reg_constant可能是权重衰减的全局乘法因子,scale是每层中每个权重的局部因子权重衰减(例如卷积,完全连接)。就像'caffe'一样。是的,你说得对,需要网格搜索来选择这些超参数。为每个层选择每个局部衰减因子非常困难,特别是对于那些非常深的网络。如何初始化权重也非常重要。这么困难... – mining