pytorch 的nn.MSELoss()损失函数

nn.MSELoss均方损失函数:

loss(x_i,y_i)=(x_i-y_i)^2

这里,loss,x,y的维度是一样的,可以是向量或者矩阵,i是下标。比如若x,y是矩阵

x=[a_{ij}], y=[b_{ij}], 0<i<n,0<j<m

则x,y的均方误差计算是逐元素运算的

loss(x,y)=\sum_{i=0}^n \sum_{j=0}^m (a_{ij}-b_{ij})^2

import torch
import torch.nn as nn
crit=nn.MSELoss()#均方损失函数
target = torch.FloatTensor([[1, 2, 3], [4, 5, 6]])
pred= torch.FloatTensor([[7, 8, 9], [8, 4, 3]])
cost=crit(pred,target)#将pred,target逐个元素求差,然后求平方,再求和,再求均值,
print(cost)#tensor(22.3333)
sum=0
for i in range (0,2):#遍历行i
    for j in range(0,3):#遍历列
        sum+=(target[i][j]-pred[i][j])*(target[i][j]-pred[i][j])#对应元素做差,然后平方
print(sum/6)#tensor(22.3333)

很多的loss函数都有size_average和reduce两个布尔类型的参数,因为一般损失函数都是直接计算batch的数据,因此返回的loss结果都是维度为(batch_size,)的向量。

1)如果reduce=False,那么size_average参数失效,直接返回向量形式的loss

2)如果redcue=true,那么loss返回的是标量。

   2.a: if size_average=True, 返回loss.mean();#就是平均数

   2.b: if size_average=False,返回loss.sum()

注意:默认情况下,reduce=true,size_average=true

你可能感兴趣的:(pytorch 的nn.MSELoss()损失函数)