此正则化代码如何影响损失?

时间:2019-04-11 10:00:53

标签: python tensorflow deep-learning regularized

我已经看到了一些关于卷积神经网络代码的学习。我不理解这段代码的下一部分。

loss = tf.reduce_sum(tf.nn.l2_loss(tf.subtract(train_output, train_gt)))
    for w in weights:
        loss += tf.nn.l2_loss(w)*1e-4

第一行是可以理解的。它将学习的结果与标签进行比较,然后表示差异的平方。这就是损失的定义。但是我不理解后面的代码:for w in weights: !!

这里w是10个权重和偏差的列表。因此len(w)20(w10 + b10)。但是为什么这段代码为什么要计算w的平方并乘以1e-4来增加损失呢?

学习过程是否必要?

1 个答案:

答案 0 :(得分:2)

这是您拥有的公式:

enter image description here

  1. tf.subtract(train_output, train_gt)在两个张量train_outputtrain_gt之间进行逐元素减法。
  2. tf.nn.l2_loss(tf.subtract(train_output, train_gt))从(1)计算所得张量的l2-范数。
  3. tf.reduce_sum(tf.nn.l2_loss(tf.subtract(train_output, train_gt)))对所有维度执行归约求和(例如,批次中有多个样品-公式中有N个样品)。
  4. for w in weights: loss += tf.nn.l2_loss(w)*1e-4添加l2正则项(模型中所有l2归一化权重的平方和)。

但是为什么此代码计算w的平方并乘以1e-4来增加损失呢?这是学习的必要课程吗?

它惩罚您权重的较大值,并将您的解决方案(按权重)限制在某些边界区域。 有必要吗?有时是,有时不是。没有简短的答案。首先阅读以下内容: