基本概念

均方误差(mean square error, MSE),是反应估计量与被估计量之间差异程度的一种度量,设ttt是根据子样确定的总体参数θ\thetaθ的一个估计量,(θ−t)2(\theta-t)^{2}(θ−t)2的数学期望,称为估计量ttt的均方误差。

pytorch中MSELoss函数介绍

torch.nn.MSELoss(size_average=True,reduce=True,reduction=′mean′)torch.nn.MSELoss(size\_average=True, reduce=True, reduction='mean')torch.nn.MSELoss(size_average=True,reduce=True,reduction=′mean′)
创建一个度量:输入xxx(模型预测输出)和目标yyy之间的均方误差标准。
loss(x,y)=1n∑(xi−yi)2loss(x,y)=\frac{1}{n}\sum(x_i-y_i)^2loss(x,y)=n1​∑(xi​−yi​)2

其实按照我们习惯的写法,预测值是y^\hat{y}y^​,真值是yyy,那么公式为:
loss(y^,y)=1n∑(y^i−yi)2loss(\hat{y},y)=\frac{1}{n}\sum(\hat{y}_i-y_i)^2loss(y^​,y)=n1​∑(y^​i​−yi​)2

  • y^\hat{y}y^​和yyy可以是任意形状,每个包含nnn个元素。
  • 对nnn个元素对应差值的平方求和,得到的结果再除以nnn。
  • 如果在创建MSELossMSELossMSELoss实例的时候,在构造函数中传入size_average=Falsesize\_average=Falsesize_average=False,那么求出来的平方和将不会除以nnn。
  • 如果reduce=Falsereduce=Falsereduce=False,那么size_averagesize\_averagesize_average参数失效,直接返回向量形式losslossloss。

实验(使用jupyter notebook进行实验)

预测值和真值都是形状为(2,5)(2, 5)(2,5)的张量,使用randnrandnrandn函数随机产生。

import torch
import torch.nn as nn
import math
import numpy as np
#默认求的是平均值、input = torch.randn(2, 5, requires_grad=True)#预测值
target = torch.randn(2, 5)#真值
print('input is', input)
print('target is', target)

输出:

input is tensor([[-0.8038, -1.0976, -0.2270, -0.6983, -0.2839],[-0.3291, -0.6583, -1.1446, -0.0108, -0.4827]], requires_grad=True)
target is tensor([[-1.4185,  0.5586,  0.3662,  0.9048,  1.5899],[ 1.5777,  0.7461,  2.4658, -0.3369,  0.7868]])

1、实例化MSELoss,使用默认设置(输出的loss为标量形式,并且是平均值):

loss = nn.MSELoss()
output = loss(input, target)
print('output is', output)

输出:

output is tensor(2.9916, grad_fn=<MseLossBackward>)

验证(自己使用公式计算loss值,公式为loss=1n∑(yi^−yi)2loss=\frac{1}{n}\sum(\hat{y_i}-y_i)^2loss=n1​∑(yi​^​−yi​)2):

sum_1 = []
harm = 0
for i in range(2):for j in range(5):subtract = input[i][j] - target[i][j]square = subtract * subtractharm += squaresum_1.append(harm)harm = 0
# print(sum_1)
rows ,cols = input.size()
he = 0
for i in range(2):he += sum_1[i]
# print('')
L = he / (rows * cols)
print('自己计算loss:', L)

输出:

自己计算loss: tensor(2.9916, grad_fn=<DivBackward0>)

2、实例化MSELoss,不使用平均值(size_average=False)

loss = nn.MSELoss(size_average = False)
output = loss(input, target)
print('output is', output)

输出:

output is tensor(29.9156, grad_fn=<MseLossBackward>)

3、实例化MSELoss, 输出为向量形式(reduce=False)

loss = nn.MSELoss(reduce = False)
output = loss(input, target)
print('output is', output)

输出:

output is tensor([[ 0.3779,  2.7431,  0.3519,  2.5697,  3.5111],[ 3.6359,  1.9726, 13.0353,  0.1064,  1.6118]],grad_fn=<MseLossBackward>)

4、验证使用reduce=False时,size_average失效。

  • 1、reduce=False,size_average=Falsereduce=False, size\_average=Falsereduce=False,size_average=False
loss = nn.MSELoss(reduce = False, size_average = False)
output = loss(input, target)
print('output is', output)

输出:

output is tensor([[ 0.3779,  2.7431,  0.3519,  2.5697,  3.5111],[ 3.6359,  1.9726, 13.0353,  0.1064,  1.6118]],grad_fn=<MseLossBackward>)
  • 2、reduce=False,size_average=Truereduce=False, size\_average=Truereduce=False,size_average=True
loss = nn.MSELoss(reduce = False, size_average = True)
output = loss(input, target)
print('output is', output)

输出:

output is tensor([[ 0.3779,  2.7431,  0.3519,  2.5697,  3.5111],[ 3.6359,  1.9726, 13.0353,  0.1064,  1.6118]],grad_fn=<MseLossBackward>)

pytorch中的MSELoss函数相关推荐

  1. 关于PyTorch中的register_forward_hook()函数未能执行其中hook函数的问题

    关于PyTorch中的register_forward_hook()函数未能执行其中hook函数的问题 Hook 是 PyTorch 中一个十分有用的特性.利用它,我们可以不必改变网络输入输出的结构, ...

  2. Pytorch中的collate_fn函数用法

    Pytorch中的collate_fn函数用法 官方的解释:   Puts each data field into a tensor with outer dimension batch size ...

  3. PyTorch中torch.norm函数详解

    torch.norm() 是 PyTorch 中的一个函数,用于计算输入张量沿指定维度的范数.具体而言,当给定一个输入张量 x 和一个整数 p 时,torch.norm(x, p) 将返回输入张量 x ...

  4. pytorch 中 利用自定义函数 get_mask_from_lengths(lengths, max_len)获取每个batch的mask

    在pytorch中,经常会需要通过batch进行批量处理数据,由于每个batch中各个样本之间存在差异,经常会需要进行先padding后mask的操作. 尤其是在自然语言处理任务中,每个batch中的 ...

  5. pytorch 中的topk函数

    pytorch中topk() 函数用法 1. 函数介绍 最近在代码中看到这两个语句 maxk = max(topk) _, pred = output.topk(maxk, 1, True, True ...

  6. Pytorch中的contiguous()函数

    这个函数主要是为了辅助pytorch中的一些其他函数,主要包含 在PyTorch中,有一些对Tensor的操作不会真正改变Tensor的内容,改变的仅仅是Tensor中字节位置的索引.这些操作有: n ...

  7. PyTorch中的matmul函数详解

    PyTorch中的两个张量的乘法可以分为两种: 两个张量对应的元素相乘(element-wise),在PyTorch中可以通过torch.mul函数(或者∗*∗运算符)实现 两个张量矩阵相乘(Matr ...

  8. PyTorch中F.cross_entropy()函数

    对PyTorch中F.cross_entropy()的理解 PyTorch提供了求交叉熵的两个常用函数: 一个是F.cross_entropy(), 另一个是F.nll_entropy(), 是对F. ...

  9. pytorch中的contiguous()函数的浅浅解释

    contiguous() 有些tensor并不是占用一整块内存,而是由不同的数据块组成. contiguous()函数的作用:把tensor变成在内存中连续分布的形式. 来自链接一 contiguou ...

最新文章

  1. 寒假每日一题(提高组)【Week 4 完结】
  2. MyBatis-Plus 高级功能 —— 自动填充功能
  3. Check_mk 主机状态为 down 但是主机下其他服务有数据且正常 解决方法
  4. 飞桨模型保存_飞桨实战笔记:自编写模型如何在服务器和移动端部署
  5. Codeforces Round #149 (Div. 2)【AK】
  6. 200行代码写一个简易的dva
  7. 数据结构-树1-概念
  8. 关于http协议中的服务器状态情况
  9. 机器人煮面机创始人_那个火爆的煮面机器人搬走了!一大波机器人“入侵”,无人餐厅只是玩噱头?...
  10. PHP将一个pdf 拆分按需要页码组装新的pdf
  11. 访问计算机计算机网络密码忘记了怎么办,无线网密码忘记了怎么办?
  12. 计算机辅助设计实训报告范文,计算机辅助设计实习实习报告
  13. 计算机接入因特网有几种方式有哪些,简述几种因特网的接入方式?
  14. 【爬虫实战】国家企业公示网-crawler爬虫抓取数据
  15. 如何将局域网IP映射为公网IP
  16. 前清秘史――努尔哈赤
  17. 2021年安全生产模拟考试(全国特种作业操作证电工作业-高压电工模拟考试题库二)
  18. 【职场】工作上遇到的问题
  19. LeetCode-求一个集合的子集
  20. 留言获赠书 | 朱春雷:Rust编程:入门 实战与进阶

热门文章

  1. 【教程】爱玩吧QQ空间说说刷赞网怎么刷秒赞教程
  2. QT和linux实现简易远程聊天工具
  3. signature=d35ee78c71b9950dc8dfdc350316e389,Low complexity encoder and decoder
  4. AlphaGo挑战围棋九段高手李世石
  5. html:canvas画布绘图简单入门-绘制时钟-3
  6. 终极实践:部署LNMP服务
  7. 智慧医疗、互联网医疗相关术语
  8. 父母不要对孩子说的10句话
  9. Arduino基础1
  10. 【安卓学习积累】IntentService的源码分析