损失函数
1. 损失函数的作用
- 损失函数用于衡量预测值和真实之间的误差关系,用于后续的模型参数调整也就是模型训练过程中的参数指导
- pytorch的
nn
模块中包含了回归任务、分类任务的诸多损失函数计算方式,网址(https://pytorch.org/docs/stable/nn.html#loss-functions)中给出了各种损失函数的调用结构,以及详细的损失函数的使用说明
2.MSELoss介绍
-
nn
模块中直接集成了具体的损失函数,通过下面的代码可以创建一个损失函数类的实例pythonfrom torch import nn loss = nn.MSELoss(reduction)
-
reduction:
用于指定计算误差的方法是取均值还是总和-
reduction="sum"
时损失函数的计算方式为
l o s s = ∑ i n ( x i − y i ) 2 loss = \sum_{i}^{n}{(x_i - y_i)^2} loss=i∑n(xi−yi)2 -
reduction="mean"
时损失函数的计算方式为
l o s s = ∑ i n ( x i − y i ) 2 n loss={\sum_{i}^{n}{(x_i-y_i)^2} \over n} loss=n∑in(xi−yi)2
-
-
-
使用创建的实例进行一个简单计算
pythonresult_loss = loss(input, target)
input targe:
分别是输入和输出,使用损失函数时要特别注意数据维度的问题(通常情况下input.shape == target.shape
),官方文档中可以查看的每个函数的对数据输入和输出的维度的要求
3. CrossEntropyLoss介绍
-
交叉熵损失函数一般用于在分类特别是多分类问题中,衡量的是模型预测的概率分布与真实分布之间的差异数值越小表示模型预测越接近真实标签。
nn
模块中集成了这个交叉熵损失函数pythonloss = nn.CrossEntropyLoss()
-
nn
模块中的CrossEntropyLoss
对于输入数据是集成了softmax
概率计算的,所以对于网络结构得到的数据直接投入损失函数中计算即可,不需要单独进行softmax:
pythonresult_loss = loss(input, target)
- 同样是需要注意维度要求,常见情况如下所示:
input(C) --> target(1):
具体情况为一个样本会生成对C个类别的预测概率,而target只需要具体指定当前样本的类别是什么就可以input(N, C) --> target(N):
具体情况为,样本集合的batch_size=N
,target给出了每一个样本本的类别序号
- 同样是需要注意维度要求,常见情况如下所示: