pytorch中的MSELoss函数
基本概念
均方誤差(mean square error, MSE),是反應(yīng)估計(jì)量與被估計(jì)量之間差異程度的一種度量,設(shè)ttt是根據(jù)子樣確定的總體參數(shù)θ\thetaθ的一個(gè)估計(jì)量,(θ?t)2(\theta-t)^{2}(θ?t)2的數(shù)學(xué)期望,稱為估計(jì)量ttt的均方誤差。
pytorch中MSELoss函數(shù)介紹
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′)
創(chuàng)建一個(gè)度量:輸入xxx(模型預(yù)測(cè)輸出)和目標(biāo)yyy之間的均方誤差標(biāo)準(zhǔn)。
loss(x,y)=1n∑(xi?yi)2loss(x,y)=\frac{1}{n}\sum(x_i-y_i)^2loss(x,y)=n1?∑(xi??yi?)2
其實(shí)按照我們習(xí)慣的寫法,預(yù)測(cè)值是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可以是任意形狀,每個(gè)包含nnn個(gè)元素。
- 對(duì)nnn個(gè)元素對(duì)應(yīng)差值的平方求和,得到的結(jié)果再除以nnn。
- 如果在創(chuàng)建MSELossMSELossMSELoss實(shí)例的時(shí)候,在構(gòu)造函數(shù)中傳入size_average=Falsesize\_average=Falsesize_average=False,那么求出來的平方和將不會(huì)除以nnn。
- 如果reduce=Falsereduce=Falsereduce=False,那么size_averagesize\_averagesize_average參數(shù)失效,直接返回向量形式losslossloss。
實(shí)驗(yàn)(使用jupyter notebook進(jìn)行實(shí)驗(yàn))
預(yù)測(cè)值和真值都是形狀為(2,5)(2, 5)(2,5)的張量,使用randnrandnrandn函數(shù)隨機(jī)產(chǎn)生。
import torch import torch.nn as nn import math import numpy as np #默認(rèn)求的是平均值、input = torch.randn(2, 5, requires_grad=True)#預(yù)測(cè)值 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、實(shí)例化MSELoss,使用默認(rèn)設(shè)置(輸出的loss為標(biāo)量形式,并且是平均值):
loss = nn.MSELoss() output = loss(input, target) print('output is', output)輸出:
output is tensor(2.9916, grad_fn=<MseLossBackward>)驗(yàn)證(自己使用公式計(jì)算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('自己計(jì)算loss:', L)輸出:
自己計(jì)算loss: tensor(2.9916, grad_fn=<DivBackward0>)2、實(shí)例化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、實(shí)例化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、驗(yàn)證使用reduce=False時(shí),size_average失效。
- 1、reduce=False,size_average=Falsereduce=False, size\_average=Falsereduce=False,size_average=False
輸出:
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
輸出:
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>)總結(jié)
以上是生活随笔為你收集整理的pytorch中的MSELoss函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XMM SSE2浮点指令
- 下一篇: 超图举例单值专题图色带样式控制