【问题标题】:Do we need to add the regularization loss into the total loss in tensorflow models?我们是否需要将正则化损失添加到张量流模型的总损失中?
【发布时间】:2017-10-07 11:39:45
【问题描述】:

在模型定义中,我使用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是什么关系?谢谢。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    你是对的。

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

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

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

    如果您怀疑某个层应该被特别规范化,您可以按照第一种情况只将该特定层 scale 设置为不同的值。像以前一样应用网格搜索,只是这次在两个不同的比例值上。

    【讨论】:

    • 您好,非常感谢您的回答!是的,如果我理解正确,reg_constant 可能是权重衰减的全局乘法因子,scale 是每层中每个权重的局部因子权重衰减(例如卷积,全连接)。就像caffe 中的方式一样。是的,你完全正确,需要网格搜索来选择这些超参数。为每一层选择每个局部衰减因子确实很困难,尤其是对于那些非常深的网络。而如何初始化权重也很重要。好难……
    猜你喜欢
    • 1970-01-01
    • 2018-07-04
    • 2018-02-03
    • 2018-12-16
    • 2018-12-07
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多