损失函数loss和优化器optimizer

这篇具有很好参考价值的文章主要介绍了损失函数loss和优化器optimizer。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

损失函数与优化器的关联_criterion(outputs, labels)_写代码_不错哦的博客-CSDN博客https://blog.csdn.net/shenjianhua005/article/details/123971915?ops_request_misc=&request_id=6583569ecbdc4daf89dbf2d43eac9242&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~all~koosearch~default-2-123971915-null-null.142^v93^koosearch_v1&utm_term=%E6%80%8E%E4%B9%88%E6%A0%B9%E6%8D%AE%E6%8D%9F%E5%A4%B1%E5%BA%A6%E4%BC%98%E5%8C%96&spm=1018.2226.3001.4187

loss与optimizer没有任何关联(直观上),其实它们并不需要直接联系,它们是通过 Tensor 这个类来达到间接联系的。

首先,net网络中的参数都是tensor,一个 tensor 里面有两个地址,一个是存放的这个tensor当前实实在在的值,比如赋值为10,还有一个存放的是10求导后的值(  .grad  ),就是导数。当然,如果没求导,另一个存放的是None。

当我们进行计算loss.backward()的时候,其实就是进行反向链式求导,这个求导是对net中的参数进行求导的,这里面的参数就是tensor,其有两个地址,分别存放当前值和反向求导的值,loss.backward()后,这个时候就每个参数里面都有导数,然后optimizer其实就是根据net每个参数的导数进行优化(在最开始定义的时候就已经绑定optimizer与net的参数了),这也就关联了loss与optimizer了。

optimizer.step()是更新参数

刚刚写完这个,突然想到,loss是怎么跟net中参数联系起来的,其实可以这么来看:

y=w1X1+w2X2+w3X3

我们在计算 loss = criterion(out, input)时,这里的out就等于y就等于w1X1+w2X2+w3X3,(虽然y是一些具体的值,但是这些值是由w1X1+w2X2+w3X3构成的),所以 losss.backward()的时候就是更新w1,w2,w3,所以这就关联了。


loss = softmax_entropy(outputs).mean(0)
loss.backward()
optimizer.step()
optimizer.zero_grad()
  1. loss = softmax_entropy(outputs).mean(0): 这一行代码计算了模型输出的损失。首先,对输出进行softmax操作,将其转换为概率分布。接下来,使用交叉熵损失函数计算每个样本的损失。最后,通过mean(0)对样本的损失进行平均,得到一个标量的损失值。

  2. loss.backward(): 这行代码触发了反向传播过程。它根据计算图以及链式法则,计算了损失相对于模型参数的梯度。这个过程通过自动微分(autograd)机制来完成,梯度信息会被累积在每个参数的.grad属性中。

  3. optimizer.step(): 这一步用来更新模型的参数。优化器根据计算得到的梯度信息,根据所选的优化算法(如随机梯度下降法SGD、Adam等),更新模型中的可学习参数。这个过程会更新模型中的权重和偏置等参数,使其朝着减小损失的方向调整。

  4. optimizer.zero_grad(): 这一行代码将模型参数的梯度清零。在进行下一轮迭代之前,需要将之前一轮迭代中计算的梯度进行清除。它是必要的,因为PyTorch默认会在反向传播过程中累积梯度,如果不清零,梯度将会累积在后续迭代中,导致结果不正确的参数更新。文章来源地址https://www.toymoban.com/news/detail-709614.html

到了这里,关于损失函数loss和优化器optimizer的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习(23):SmoothL1Loss损失函数

    SmoothL1Loss是一种常用的损失函数,通常用于回归任务中,其相对于均方差(MSE)损失函数的优势在于对异常值(如过大或过小的离群点)的惩罚更小,从而使模型更加健壮。 SmoothL1Loss的公式为: l o s s ( x , y ) = { 0.5 ( x − y ) 2 if  ∣ x − y ∣ 1 ∣ x − y ∣ − 0.5 otherwise loss(x,y) = b

    2024年02月02日
    浏览(44)
  • 论文代码学习—HiFi-GAN(3)——模型损失函数loss解析

    这里翻译了HiFi-GAN这篇论文的具体内容,具体链接。 这篇文章还是学到了很多东西,从整体上说,学到了生成对抗网络的构建思路,包括生成器和鉴定器。细化到具体实现的细节,如何 实现对于特定周期的数据处理?在细化,膨胀卷积是如何实现的?这些通过文章,仅仅是了

    2024年02月14日
    浏览(91)
  • 人工智能_机器学习065_SVM支持向量机KKT条件_深度理解KKT条件下的损失函数求解过程_公式详细推导_---人工智能工作笔记0105

    之前我们已经说了KKT条件,其实就是用来解决 如何实现对,不等式条件下的,目标函数的求解问题,之前我们说的拉格朗日乘数法,是用来对 等式条件下的目标函数进行求解. KKT条件是这样做的,添加了一个阿尔法平方对吧,这个阿尔法平方肯定是大于0的,那么 可以结合下面的文章去

    2024年02月04日
    浏览(43)
  • 损失函数——Dice Loss损失函数

    Dice Loss 是一种用于图像分割任务的损失函数,它的基本思想是计算预测结果和真实结果的重叠部分,通过最小化两者的差异来优化模型。Dice Loss被广泛用于医学图像分割任务中。 Dice Loss的计算公式如下:  其中,N是像素总数,pi​是模型预测的第i个像素的值,gi​是真实标

    2024年02月07日
    浏览(43)
  • 深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测

    深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测 在物理学中,“熵”被用来表示热力学系统所呈现的无序程度。香农将这一概念引入信息论领域,提出了“信息熵”概念,通过对数函数来测量信息的不确定性。交叉熵(

    2023年04月18日
    浏览(52)
  • 损失函数——对数损失(Logarithmic Loss,Log Loss)

    对数损失(Logarithmic Loss,Log Loss) 是一种用于衡量分类模型的损失函数。它通常用于二元分类问题,但也可以用于多元分类问题。 在二元分类问题中,Log Loss 基于预测概率和实际标签的对数误差来计算损失。对于一个样本 i,假设它的实际标签是 yi​(取值为 0 或 1),模

    2024年02月15日
    浏览(53)
  • 损失函数——感知损失(Perceptual Loss)

    感知损失(Perceptual Loss) 是一种基于深度学习的图像风格迁移方法中常用的损失函数。与传统的均方误差损失函数(Mean Square Error,MSE)相比,感知损失更注重图像的感知质量,更符合人眼对图像质量的感受。 感知损失是通过预训练的神经网络来计算两张图片之间的差异。通

    2024年02月04日
    浏览(46)
  • 深度学习——常见损失函数Loss:L1 ,L2 ,MSE ,Binary Cross ,Categorical Cross ,Charbonnier ,Weighted TV ,PSNR

    在深度学习中,损失函数是一个核心组件,它度量模型的预测结果与真实值之间的差异。通过最小化损失函数的值,模型能够在训练过程中逐渐改善其性能。损失函数为神经网络提供了一个明确的优化目标,是连接数据和模型性能的重要桥梁。 选择合适的损失函数是非常重要

    2024年01月24日
    浏览(55)
  • 损失函数——交叉熵损失(Cross-entropy loss)

    交叉熵损失(Cross-entropy loss) 是深度学习中常用的一种损失函数,通常用于分类问题。它衡量了模型预测结果与实际结果之间的差距,是优化模型参数的关键指标之一。以下是交叉熵损失的详细介绍。 假设我们有一个分类问题,需要将输入数据x分为C个不同的类别。对于每个

    2024年02月02日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包