详解Pytorch中的torch.nn.MSELoss函,包括对每个参数的分析!

这篇具有很好参考价值的文章主要介绍了详解Pytorch中的torch.nn.MSELoss函,包括对每个参数的分析!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、函数介绍

Pytorch中MSELoss函数的接口声明如下,具体网址可以点这里。

torch.nn.MSELoss(size_average=None, reduce=None, reduction=‘mean’)

该函数默认用于计算两个输入对应元素差值平方和的均值。具体地,在深度学习中,可以使用该函数用来计算两个特征图的相似性。

二、使用方式
import torch

# input和target分别为MESLoss的两个输入
input = torch.tensor([0.,0.,0.])
target = torch.tensor([1.,2.,3.])

# MSELoss函数的具体使用方法如下所示,其中MSELoss函数的参数均为默认参数。
loss = torch.nn.MSELoss(size_average=None, reduce=None, reduction='mean')
loss = loss(input, target)

print(loss)

# input和target逐元素差值平方和的均值计算如下,可以看到与上述MSELoss函数的返回值相同。
# 证明了MSELoss默认用于计算两个输入逐元素差值平方和的均值。
print(((1-0)*(1-0)+(2-0)*(2-0)+(3-0)*(3-0))/3.)

详解Pytorch中的torch.nn.MSELoss函,包括对每个参数的分析!

三、参数介绍

如果同时给出了reduce、size_average、reduction三个参数,则首先看前两个参数。如果前两个参数均为None,则函数的返回值由reduction参数决定。如果前两个参数不全为None,则函数的返回值由前两个参数决定,在这种情况下,为None的那个参数默认为True。确定了三个参数的取值后,根据下述规则进行计算即可:

  • reduce=True时,若size_average=True,则返回一个batch中所有样本损失的均值,结果为标量。注意,对于MESLoss函数来说,首先对该batch中的所有样本损失进行逐元素均值操作,然后对得到N个值再进行均值操作即得到返回值(假设批大小为N,即该batch中共有N个样本),用官网的话来说,就是The mean operation still operates over all the elements, and divides by N.
  • reduce=True时,若size_average=False,则返回一个batch中所有样本损失的和,结果为标量注意,对于MESLoss函数来说,首先对该batch中的所有样本损失进行逐元素求和操作,然后对得到N个值再进行求和操作即得到返回值(假设批大小为N,即该batch中共有N个样本),用官网的话来说,就是The sum operation still operates over all the elements.
  • reduce=False时,则size_average参数失效,即无论size_average参数为False还是True,效果都是一样的。此时,函数返回的是一个batch中每个样本的损失,结果为向量
  • reduction参数包含了reduce和size_average参数的双重含义。即,当reduction=‘none’时,相当于reduce=False;当reduction=‘sum’时,相当于reduce=True且size_average=False;当reduction=‘mean’时,相当于reduce=True且size_average=True;这也是为什么reduce和size_average参数将在后续版本中被弃用的原因

实际上,大家在使用该函数时完全不用考虑地这么细致。上面之所以分析地这么细致只是想系统地对该函数进行一个分析讲解,用于帮助那些喜欢深究的同学。如果你只是想快速地使用该函数,只需要将前两个参数即reduce和size_average参数置为None,然后对reduction进行传参即可;由于该函数的前两个参数本身就默认为None,因此只需要对reduction进行传参即可,具体使用例子可以参考第四部分。

四、实例讲解

1.当reduction='mean’时,即返回一个batch中所有样本损失的均值。

import torch
import torch.nn.functional as F
input = [[[0.,0.,0.],
          [0.,0.,0.],
          [0.,0.,0.]],

         [[0.,0.,0.],
          [0.,0.,0.],
          [0.,0.,0.]]]
input = torch.tensor(input)

target = [[[1.,2.,3.],
           [4.,5.,6.],
           [7.,8.,9.]],

          [[11.,12.,13.],
           [14.,15.,16.],
           [17.,18.,19.]]]
target = torch.tensor(target)

loss = torch.nn.MSELoss(reduction='mean') # loss = torch.nn.MSELoss()效果相同,因为reduction参数默认为'mean'。
loss = loss(input, target)
print(loss)

# 注意,下式最后除以2是指该函数输入的批大小为2;下式中除以9是指该函数输入的批数据中每个样本的元素个数为9。
mean_result = ((1.*1. + 2.*2. + 3.*3. + 4.*4. + 5.*5. + 6.*6. + 7.*7. + 8.*8. + 9.*9.)/9 + (11.*11. + 12.*12. + 13.*13. + 14.*14. + 15.*15. + 16.*16. + 17.*17. + 18.*18. + 19.*19.)/9) / 2
print(mean_result)

详解Pytorch中的torch.nn.MSELoss函,包括对每个参数的分析!

2.当reduction='sum’时,即返回一个batch中所有样本损失的和。

import torch
import torch.nn.functional as F
input = [[[0.,0.,0.],
          [0.,0.,0.],
          [0.,0.,0.]],

         [[0.,0.,0.],
          [0.,0.,0.],
          [0.,0.,0.]]]
input = torch.tensor(input)

target = [[[1.,2.,3.],
           [4.,5.,6.],
           [7.,8.,9.]],

          [[11.,12.,13.],
           [14.,15.,16.],
           [17.,18.,19.]]]
target = torch.tensor(target)

loss = torch.nn.MSELoss(reduction='sum')
loss = loss(input, target)
print(loss)
sum_result = ((1.*1. + 2.*2. + 3.*3. + 4.*4. + 5.*5. + 6.*6. + 7.*7. + 8.*8. + 9.*9.) + (11.*11. + 12.*12. + 13.*13. + 14.*14. + 15.*15. + 16.*16. + 17.*17. + 18.*18. + 19.*19.))
print(sum_result)

详解Pytorch中的torch.nn.MSELoss函,包括对每个参数的分析!

3.当reduction=‘none’时,即返回的是一个batch中每个样本的损失。

import torch
import torch.nn.functional as F
input = [[[0.,0.,0.],
          [0.,0.,0.],
          [0.,0.,0.]],

         [[0.,0.,0.],
          [0.,0.,0.],
          [0.,0.,0.]]]
input = torch.tensor(input)

target = [[[1.,2.,3.],
           [4.,5.,6.],
           [7.,8.,9.]],

          [[11.,12.,13.],
           [14.,15.,16.],
           [17.,18.,19.]]]
target = torch.tensor(target)

loss = torch.nn.MSELoss(reduction='none')
loss = loss(input, target)
print(loss)

详解Pytorch中的torch.nn.MSELoss函,包括对每个参数的分析!文章来源地址https://www.toymoban.com/news/detail-418213.html

五、参考链接
  • https://blog.csdn.net/u013548568/article/details/81532605
  • https://blog.csdn.net/RadiantJeral/article/details/86585152

到了这里,关于详解Pytorch中的torch.nn.MSELoss函,包括对每个参数的分析!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Pytorch:torch.nn.Module.apply用法详解

    torch.nn.Module.apply 是 PyTorch 中用于递归地应用函数到模型的所有子模块的方法。它允许对模型中的每个子模块进行操作,比如初始化权重、改变参数类型等。 以下是关于 torch.nn.Module.apply 的示例: 1. 语法 Module:PyTorch 中的神经网络模块,例如 torch.nn.Module 的子类。 fn:要应用到

    2024年01月15日
    浏览(51)
  • Pytorch学习:神经网络模块torch.nn.Module和torch.nn.Sequential

    官方文档:torch.nn.Module CLASS torch.nn.Module(*args, **kwargs) 所有神经网络模块的基类。 您的模型也应该对此类进行子类化。 模块还可以包含其他模块,允许将它们嵌套在树结构中。您可以将子模块分配为常规属性: training(bool) -布尔值表示此模块是处于训练模式还是评估模式。

    2024年02月10日
    浏览(43)
  • Pytorch:torch.nn.Module

    torch.nn.Module 是 PyTorch 中神经网络模型的基类,它提供了模型定义、参数管理和其他相关功能。 以下是关于 torch.nn.Module 的详细说明: 1. torch.nn.Module 的定义: torch.nn.Module 是 PyTorch 中所有神经网络模型的基类,它提供了模型定义和许多实用方法。自定义的神经网络模型应该继

    2024年01月16日
    浏览(48)
  • 【Pytorch】torch.nn.LeakyReLU()

    Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~   ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研 学习经验:扎实基础 + 多做

    2024年02月02日
    浏览(37)
  • Pytorch-----torch.nn.Module.modules()

    在使用pytorch构建神经网络时,定义的网络模型必须要继承自torch.nn.Module这一父类。在Module类中,有一个函数可以返回网络中所有模块的迭代器。这就是torch.nn.Module.modules() 提示:以下是本篇文章正文内容,下面案例可供参考 源码中的解释如下: 不只是返回网络中的某一层,

    2024年02月14日
    浏览(48)
  • 深度学习之pytorch 中 torch.nn介绍

    pytorch 中必用的包就是 torch.nn,torch.nn 中按照功能分,主要如下有几类: 1. Layers(层):包括全连接层、卷积层、池化层等。 2. Activation Functions(激活函数):包括ReLU、Sigmoid、Tanh等。 3. Loss Functions(损失函数):包括交叉熵损失、均方误差等。 4. Optimizers(优化器):包括

    2024年02月22日
    浏览(45)
  • 深入浅出Pytorch函数——torch.nn.Linear

    分类目录:《深入浅出Pytorch函数》总目录 对输入数据做线性变换 y = x A T + b y=xA^T+b y = x A T + b 语法 参数 in_features :[ int ] 每个输入样本的大小 out_features :[ int ] 每个输出样本的大小 bias :[ bool ] 若设置为 False ,则该层不会学习偏置项目,默认值为 True 变量形状 输入变量:

    2024年02月12日
    浏览(46)
  • 深入浅出Pytorch函数——torch.nn.Softmax

    分类目录:《深入浅出Pytorch函数》总目录 相关文章: · 机器学习中的数学——激活函数:Softmax函数 · 深入浅出Pytorch函数——torch.softmax/torch.nn.functional.softmax · 深入浅出Pytorch函数——torch.nn.Softmax 将Softmax函数应用于 n n n 维输入张量,重新缩放它们,使得 n n n 维输出张量的

    2024年02月15日
    浏览(57)
  • 深入浅出Pytorch函数——torch.nn.Module

    分类目录:《深入浅出Pytorch函数》总目录 Pytorch中所有网络的基类,我们的模型也应该继承这个类。 Modules 也可以包含其它 Modules ,允许使用树结构嵌入他们,我们还可以将子模块赋值给模型属性。 语法 方法 torch.nn.Module.apply 实例 通过上面方式赋值的 submodule 会被注册,当调

    2024年02月12日
    浏览(68)
  • torch.nn.functional.normalize参数说明

    公式为 v max ⁡ ( ∥ v ∥ p , ϵ ) frac{v}{max(lVert v rVert_p, epsilon)} max (∥ v ∥ p ​ , ϵ ) v ​ F.normalize(data, p=2/1, dim=0/1/-1) 将某一个维度除以那个维度对应的范数(默认是2范数) input:输入的数据(tensor) p:L2/L1_norm运算,(默认是2范数) dim:0表示按列操作,则每列都是除以该列下平方

    2024年02月05日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包