【pytorch】交叉熵损失函数 F.cross_entropy()

简介: 【pytorch】交叉熵损失函数 F.cross_entropy()

F.cross_entropy(x,y)


  cross_entropy(x,y)是交叉熵损失函数,一般用于在全连接层之后,做loss的计算。

  其中x是二维张量,是全连接层的输出;y是样本标签值。

x[batch_size,type_num];y[batch_size]。

  cross_entropy(x,y)计算结果是一个小数,表示loss的值。

举例说明


x = np.array([[1, 2,3,4,5],#共三3样本,有5个类别
              [1, 2,3,4,5],
              [1, 2,3,4,5]]).astype(np.float32)
y = np.array([1, 1, 0])#这3个样本的标签分别是1,1,0即两个是第2类,一个是第1类
x = torch.from_numpy(x)
y = torch.from_numpy(y).long()
soft_out = F.softmax(x,dim=1)#给每个样本的pred向量做指数归一化---softmax
log_soft_out = torch.log(soft_out)#将上面得到的归一化的向量再point-wise取对数
loss = F.nll_loss(log_soft_out, y)#将归一化且取对数后的张量根据标签求和,实际就是计算loss的过程
"""
这里的loss计算式根据batch_size归一化后的,即是一个batch的平均单样本的损失,迭代一次模型对一个样本平均损失。
在多个epoch训练时,还会求每个epoch内的总损失,用于衡量epoch之间模型性能的提升。
"""
print(soft_out)
print(log_soft_out)
print(loss)
loss = F.cross_entropy(x, y)
print(loss)

输出:


  softmax:

  tensor([[0.0117, 0.0317, 0.0861, 0.2341, 0.6364],

  [0.0117, 0.0317, 0.0861, 0.2341, 0.6364],

  [0.0117, 0.0317, 0.0861, 0.2341, 0.6364]])

  tensor([[-4.4519, -3.4519, -2.4519, -1.4519, -0.4519], 

   [-4.4519, -3.4519, -2.4519, -1.4519, -0.4519],

  [-4.4519, -3.4519, -2.4519, -1.4519, -0.4519]])

  tensor(3.7852)

结果分析


F.softmax(x,dim=1):一行和为1 sum([0.0117, 0.0317, 0.0861, 0.2341, 0.6364])=1
softmax函数公式
torch.log(soft_out):对softmax的结果进行取对数
a =pow(math.e,1)/(pow(math.e,1)+pow(math.e,2)+pow(math.e,3)+pow(math.e,4)+pow(math.e,5)) # 0.011656230956039609近似0.0117
print(math.log(0.011656230956039609)) # -4.4519
F.nll_loss(log_soft_out, y):对取对数的结果,根据y的值,(y值是索引),找到对应的值,黄色部分,各自取相反数再相加,求平均
(3.4519+3.4519+4.4519)/3 = 3.7852
所以:
cross_entropy函数:softmax->log->nll_loss

特别注意⭐⭐


  全连接层的输出形状为[batch_size,type_num]。含义是第i个样本为第j类的概率。

相关文章
|
7月前
|
机器学习/深度学习 文字识别 PyTorch
PyTorch内置损失函数汇总 !!
PyTorch内置损失函数汇总 !!
111 0
|
7月前
|
数据挖掘 PyTorch 算法框架/工具
人脸识别中的损失函数ArcFace及其实现过程代码(pytorch)--理解softmax损失函数及Arcface
人脸识别中的损失函数ArcFace及其实现过程代码(pytorch)--理解softmax损失函数及Arcface
608 0
|
2月前
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
328 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
3月前
|
机器学习/深度学习
小土堆-pytorch-神经网络-损失函数与反向传播_笔记
在使用损失函数时,关键在于匹配输入和输出形状。例如,在L1Loss中,输入形状中的N代表批量大小。以下是具体示例:对于相同形状的输入和目标张量,L1Loss默认计算差值并求平均;此外,均方误差(MSE)也是常用损失函数。实战中,损失函数用于计算模型输出与真实标签间的差距,并通过反向传播更新模型参数。
|
7月前
|
机器学习/深度学习 监控 PyTorch
PyTorch模型训练:优化器与损失函数的选择
【4月更文挑战第17天】PyTorch中的优化器(如SGD, Adam, RMSprop)和损失函数(如MSE Loss, Cross Entropy Loss)对模型训练效果有显著影响。优化器选择应基于任务复杂度和数据规模,SGD适合简单任务,而Adam和RMSprop适用于复杂情况。损失函数选择依赖于任务类型,MSE Loss用于回归,Cross Entropy Loss用于分类。实践中,应尝试不同组合,调整学习率,监控训练过程,并使用验证集优化模型。
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch学习笔记(6):模型的权值初始化与损失函数
Pytorch学习笔记(6):模型的权值初始化与损失函数
349 0
Pytorch学习笔记(6):模型的权值初始化与损失函数
|
机器学习/深度学习 数据采集 PyTorch
pytorch教程 (四)- 损失函数
pytorch教程 (四)- 损失函数
133 0
|
机器学习/深度学习 PyTorch 算法框架/工具
pytorch基础使用—自定义损失函数
pytorch基础使用—自定义损失函数
322 0