详解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.)

在这里插入图片描述

三、参数介绍

如果同时给出了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&#x

torch.nn.functional是PyTorch中的一个模块,用于实现各种神经网络的数,包括卷积、池化、激活、损失数等。该模块中的数是基于Tensor进行操作的,可以灵活地组合使用。 常用数: 1.卷积数:torch.nn.functional.conv2d 该数用于进行二维卷积操作,输入包括输入张量、卷积核张量和卷积核大小等参数。示例代码如下: ```python import torch.nn.functional as F input = torch.randn(1, 1, 28, 28) conv1 = nn.Conv2d(1, 6, 5) output = F.conv2d(input, conv1.weight, conv1.bias, stride=1, padding=2) ``` 2.池化数:torch.nn.functional.max_pool2d 该数用于进行二维最大池化操作,输入包括输入张量、池化核大小等参数。示例代码如下: ```python import torch.nn.functional as F input = torch.randn(1, 1, 28, 28) output = F.max_pool2d(input, kernel_size=2, stride=2) ``` 3.激活数:torch.nn.functional.relu 该数用于进行ReLU激活操作,输入包括输入张量等参数。示例代码如下: ```python import torch.nn.functional as F input = torch.randn(1, 10) output = F.relu(input) ``` 4.损失数:torch.nn.functional.cross_entropy 该数用于计算交叉熵损失,输入包括预测结果和真实标签等参数。示例代码如下: ```python import torch.nn.functional as F input = torch.randn(3, 5) target = torch.tensor([1, 0, 4]) output = F.cross_entropy(input, target) ``` 以上是torch.nn.functional模块中的一些常用数,除此之外还有很多其他数,可以根据需要进行查阅。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信小海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值