这个正则化代码如何影响损失?
How does this regularization code affect loss?
看过一些用卷积神经网络学习的代码。我不明白这段代码的下一部分。
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
来加上loss呢?
是学习过程中的必需品吗?
这是你的公式:
tf.subtract(train_output, train_gt)
在两个张量 train_output
和 train_gt
. 之间进行逐元素减法
tf.nn.l2_loss(tf.subtract(train_output, train_gt))
从 (1) 计算结果张量的 l2 范数。
tf.reduce_sum(tf.nn.l2_loss(tf.subtract(train_output, train_gt)))
对所有维度执行归约和(例如,您拥有的批次中的多个样本 - 公式中的 N
个样本)。
for w in weights: loss += tf.nn.l2_loss(w)*1e-4
添加 l2 正则化项(模型中所有 l2 归一化权重的平方和)。
但是这段代码为什么要计算w的平方再乘以1e-4加上loss呢?是学习的必修课吗?
它惩罚你的权重的大值并将你的解决方案(根据权重)限制在某个有界区域。 有必要吗?有时需要,有时不需要。没有简短的答案。从阅读开始:
- Tikhonov regularization 维基百科
- 模式识别与
机器学习,作者 Bishop
看过一些用卷积神经网络学习的代码。我不明白这段代码的下一部分。
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
来加上loss呢?
是学习过程中的必需品吗?
这是你的公式:
tf.subtract(train_output, train_gt)
在两个张量train_output
和train_gt
. 之间进行逐元素减法
tf.nn.l2_loss(tf.subtract(train_output, train_gt))
从 (1) 计算结果张量的 l2 范数。tf.reduce_sum(tf.nn.l2_loss(tf.subtract(train_output, train_gt)))
对所有维度执行归约和(例如,您拥有的批次中的多个样本 - 公式中的N
个样本)。for w in weights: loss += tf.nn.l2_loss(w)*1e-4
添加 l2 正则化项(模型中所有 l2 归一化权重的平方和)。
但是这段代码为什么要计算w的平方再乘以1e-4加上loss呢?是学习的必修课吗?
它惩罚你的权重的大值并将你的解决方案(根据权重)限制在某个有界区域。 有必要吗?有时需要,有时不需要。没有简短的答案。从阅读开始:
- Tikhonov regularization 维基百科
- 模式识别与 机器学习,作者 Bishop