mse pytorch_pytorch scatter

mse pytorch_pytorch scatter基本概念均方误差(meansquareerror,MSE),是反应估计量与被估计量之间差异程度的一种度量,设ttt是根据子样确定的总体参数θ\thetaθ的一个估计量,(θ−t)2(\theta-t)^{2}(θ−t)2的数学期望,称为估计量ttt的均方误差。pytorch中MSELoss函数介绍torch.nn.MSELoss(size_average=True,reduce=Tru…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

基本概念

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

pytorch中MSELoss函数介绍

t o r c h . n n . M S E L o s s ( s i z e _ a v e r a g e = T r u e , r e d u c e = T r u e , r e d u c t i o n = ′ m e a n ′ ) torch.nn.MSELoss(size\_average=True, reduce=True, reduction=’mean’) torch.nn.MSELoss(size_average=True,reduce=True,reduction=mean)
创建一个度量:输入 x x x(模型预测输出)和目标 y y y之间的均方误差标准。
l o s s ( x , y ) = 1 n ∑ ( x i − y i ) 2 loss(x,y)=\frac{1}{n}\sum(x_i-y_i)^2 loss(x,y)=n1(xiyi)2

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

  • y ^ \hat{y} y^ y y y可以是任意形状,每个包含 n n n个元素。
  • n n n个元素对应差值的平方求和,得到的结果再除以 n n n
  • 如果在创建 M S E L o s s MSELoss MSELoss实例的时候,在构造函数中传入 s i z e _ a v e r a g e = F a l s e size\_average=False size_average=False,那么求出来的平方和将不会除以 n n n
  • 如果 r e d u c e = F a l s e reduce=False reduce=False,那么 s i z e _ a v e r a g e size\_average size_average参数失效,直接返回向量形式 l o s s loss loss

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

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

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值,公式为 l o s s = 1 n ∑ ( y i ^ − y i ) 2 loss=\frac{1}{n}\sum(\hat{y_i}-y_i)^2 loss=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 * subtract
       harm += square

    sum_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、 r e d u c e = F a l s e , s i z e _ a v e r a g e = F a l s e reduce=False, size\_average=False reduce=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、 r e d u c e = F a l s e , s i z e _ a v e r a g e = T r u e reduce=False, size\_average=True reduce=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>)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192066.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网络协议、socket、webSocket

    网络协议、socket、webSocket一、网络协议网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。1、OSI七层协议OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范。OSI模型有7层结构,从上到下分别是7应用层6表示层5会话层4传输层3网络层2数据链路层1物理层。下面的图表显示不同的协议在最初OSI模型中的位置:7应用层例如HTTP、SMTP…

    2022年5月2日
    38
  • 基于DNS解析的GSLB《CDN技术详解》

    基于DNS解析的GSLB《CDN技术详解》基于DNS解析的GSLB工作方式基于DNS解析的GSLB方案实际上就是把负载均衡设备部署在DNS系统中。在用户发出任何应用连接请求时,首先必须通过DNS系统来请求获得服务器的IP地址,基于DNS的GSLB正是在返回DNS解析结果的过程中进行智能决策,给用户返回一个最佳的服务器的IP地址。从用户的视角看,整个应用流程与没有GSLB参与时没有发生任何变化。DNS系统本身是具备简单负载分配能力的,这…

    2022年6月10日
    37
  • python3.9多线程_python创建多线程

    python3.9多线程_python创建多线程什么是线程?线程也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其

    2022年7月30日
    20
  • linux常用命令大全新手入门(零基础自学葫芦丝快速入门篇)

    一、学习前准备帮助文档Linux命令大全(★★★),可以在上面找到你要查找的linux命令Linux命令大全|菜鸟教程Linux教程|菜鸟教程Tab补全Tab补全是非常有用的一个功能,可以用来自动补全命令或文件名,省时准确。未输入状态下连按两次Tab列出所有可用命令已输入部分命令名或文件名,按Tab进行自动补全,多用你就肯定会喜欢的了。…

    2022年4月18日
    57
  • 一文彻底搞懂webpack devtool

    一文彻底搞懂webpack devtool为什么需要SourceMap首先根据谷歌开发者文档的介绍,SourceMap一般与下列类型的预处理器搭配使用:转译器(Babel) 编译器(TypeScript) Minifiers(UglifyJS)为什么呢?因为通常我们运行在浏览器中的代码是经过处理的,处理后的代码可能与开发时代码相差很远,这就导致开发调试和线上排错变得困难。这时SourceMap就登场了,有了它浏览器就可以从转换后的代码直接定位到转换前的代码。在webpack中,可以通过devtool选项来配置SourceMap

    2022年9月27日
    0
  • 解析offsetHeight,clientHeight,scrollHeight之间的区别「建议收藏」

    解析offsetHeight,clientHeight,scrollHeight之间的区别「建议收藏」在网上搜了一下,结论非常笼统,讲IE从不讲版本,因此自己做了测试并上传结论。以下结论皆是在标准模式下测试通过的,没有测试quirk模式。clientHeight大部分浏览器对clientHeight都没有什么异议,都认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,即然是指可看到内容的区域,滚动条不算在内。但要注意padding是算在内。其计算方式为clien…

    2022年9月10日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号