交 叉 熵 损 失 函 数 交叉熵损失函数 交叉熵损失函数
Pytorch实现
nn.CrossEntropyLoss(weight=None,
size_average=None,
ignore_index=-100,
reduce=None,
reduction='mean')
功能:nn.LogSoftmax()与nn.NLLLoss()结合,进行交叉嫡计算
主要参数:
weight:各类别的loss设置权值
ignore_index:忽略某个类别
reduction :计算模式,可为none/sum/mean
none-逐个元素计算
sum-所有元素求和,返回标量
mean-加权平均,返回标量
交叉熵 = 信息熵+相对熵
由于训练数据集是固定的,所以信息熵是固定的
所以优化信息熵就是优化相对熵,相对熵就是指两个分布的距离,优化相对熵就是缩进两个分布的距离,就是将预测分布逼近真实分布。
import torch
from torch import nn
outputs = torch.tensor([[1,2,3],[1,2,3],[1,2,3],[1,2,3]],dtype=torch.float)
lables = torch.tensor([0,1,2,1],dtype=torch.long) # 注意在torch中的labels需要设置为torch.long
[1,2,3]三个维度代表了3类,labal也只能设置为0,1,2来表示3类的标签
# 默认 reduction='mean'
LossFunction = nn.CrossEntropyLoss()
loss = LossFunction(outputs,lables)
loss
LossFunction_None = nn.CrossEntropyLoss(reduction='none')
LossFunction_Sum = nn.CrossEntropyLoss(reduction='sum')
LossFunction_Mean = nn.CrossEntropyLoss(reduction='mean')
print("loss_none:",loss_none)
print("loss_sum:",loss_sum)
print("loss_mean:",loss_mean)