【问题标题】:How does this regularization code affect loss?这个正则化代码如何影响损失?
【发布时间】:2019-04-11 10:00:53
【问题描述】:

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

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来增加损失呢?

学习过程中是否有必要?

【问题讨论】:

    标签: python tensorflow deep-learning regularized


    【解决方案1】:

    这是你的公式:

    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 来增加损失呢?是学习的必修课吗?

    它会惩罚较大的权重值,并将您的解决方案(就权重而言)限制在某个有界区域。 有必要吗? 有时是,有时不是。没有简短的答案。开始阅读:

    【讨论】:

    • 我认为他希望对 tf.nn.l2_loss(w)*1e-4 进行更详细的阐述,也许是在损失函数更新的基础方面。
    • 这就是我想要的答案!非常非常感谢你!删除那个代码可以吗?
    • @ddjfjfjdjfiejdn,很高兴为您提供帮助。你在说什么代码?
    • 对于 w 的权重:loss += tf.nn.l2_loss(w)*1e-4
    • @ddjfjfjdjfiejdn,尝试有无。它可能有帮助或没有帮助,取决于模型、数据等。如果可以减少错误,请使用它。
    猜你喜欢
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2013-12-05
    • 2022-11-07
    • 2023-03-28
    相关资源
    最近更新 更多