pytorch中的MSELoss函数
基本概念
均方误差(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函数相关推荐
- 关于PyTorch中的register_forward_hook()函数未能执行其中hook函数的问题
关于PyTorch中的register_forward_hook()函数未能执行其中hook函数的问题 Hook 是 PyTorch 中一个十分有用的特性.利用它,我们可以不必改变网络输入输出的结构, ...
- Pytorch中的collate_fn函数用法
Pytorch中的collate_fn函数用法 官方的解释: Puts each data field into a tensor with outer dimension batch size ...
- PyTorch中torch.norm函数详解
torch.norm() 是 PyTorch 中的一个函数,用于计算输入张量沿指定维度的范数.具体而言,当给定一个输入张量 x 和一个整数 p 时,torch.norm(x, p) 将返回输入张量 x ...
- pytorch 中 利用自定义函数 get_mask_from_lengths(lengths, max_len)获取每个batch的mask
在pytorch中,经常会需要通过batch进行批量处理数据,由于每个batch中各个样本之间存在差异,经常会需要进行先padding后mask的操作. 尤其是在自然语言处理任务中,每个batch中的 ...
- pytorch 中的topk函数
pytorch中topk() 函数用法 1. 函数介绍 最近在代码中看到这两个语句 maxk = max(topk) _, pred = output.topk(maxk, 1, True, True ...
- Pytorch中的contiguous()函数
这个函数主要是为了辅助pytorch中的一些其他函数,主要包含 在PyTorch中,有一些对Tensor的操作不会真正改变Tensor的内容,改变的仅仅是Tensor中字节位置的索引.这些操作有: n ...
- PyTorch中的matmul函数详解
PyTorch中的两个张量的乘法可以分为两种: 两个张量对应的元素相乘(element-wise),在PyTorch中可以通过torch.mul函数(或者∗*∗运算符)实现 两个张量矩阵相乘(Matr ...
- PyTorch中F.cross_entropy()函数
对PyTorch中F.cross_entropy()的理解 PyTorch提供了求交叉熵的两个常用函数: 一个是F.cross_entropy(), 另一个是F.nll_entropy(), 是对F. ...
- pytorch中的contiguous()函数的浅浅解释
contiguous() 有些tensor并不是占用一整块内存,而是由不同的数据块组成. contiguous()函数的作用:把tensor变成在内存中连续分布的形式. 来自链接一 contiguou ...
最新文章
- 寒假每日一题(提高组)【Week 4 完结】
- MyBatis-Plus 高级功能 —— 自动填充功能
- Check_mk 主机状态为 down 但是主机下其他服务有数据且正常 解决方法
- 飞桨模型保存_飞桨实战笔记:自编写模型如何在服务器和移动端部署
- Codeforces Round #149 (Div. 2)【AK】
- 200行代码写一个简易的dva
- 数据结构-树1-概念
- 关于http协议中的服务器状态情况
- 机器人煮面机创始人_那个火爆的煮面机器人搬走了!一大波机器人“入侵”,无人餐厅只是玩噱头?...
- PHP将一个pdf 拆分按需要页码组装新的pdf
- 访问计算机计算机网络密码忘记了怎么办,无线网密码忘记了怎么办?
- 计算机辅助设计实训报告范文,计算机辅助设计实习实习报告
- 计算机接入因特网有几种方式有哪些,简述几种因特网的接入方式?
- 【爬虫实战】国家企业公示网-crawler爬虫抓取数据
- 如何将局域网IP映射为公网IP
- 前清秘史――努尔哈赤
- 2021年安全生产模拟考试(全国特种作业操作证电工作业-高压电工模拟考试题库二)
- 【职场】工作上遇到的问题
- LeetCode-求一个集合的子集
- 留言获赠书 | 朱春雷:Rust编程:入门 实战与进阶