在做多分类问题的时候,分类结果的损失函数经常使用交叉熵损失函数,对于预测结果,先经过softmax,然后经过log,然后再根据One hot向量只取得其中的一个值作为损失函数的吸收值,比如,logsoftmax后的值为[-0.6, -0.12 , -0.33, -0.334, -0.783],假设one hot label 为[ 0,0,0,0,1 ],则损失函数的值为 Loss = 0.783,,也就是说,只有一个值纳入了计算,我就在想,可不可以将所有的值都纳入计算呢,如果这样的话,就得将label转为soft label ,为 [0.2, 0.2 , 0.2, 0.2, 1],将0 Label 的地方设置为 1/(label.shape[0]),再进行计算损失,则这个对应的损失函数的pytorch实现如下所示:

class softcrossentropy(nn.Module):def __init__(self):super( softcrossentropy, self ).__init__()self.cel = nn.CrossEntropyLoss()self.logsoftmax = nn.LogSoftmax(dim=1)def forward(self, inputs, labels):loss_tra_cel = self.cel( inputs, labels )ls = (-1) * self.logsoftmax(inputs)ls_sum = torch.sum(ls, dim=1) / inputs.shape[1]loss_soft_cel = torch.sum( ls_sum ) / inputs.shape[0]loss = loss_tra_cel + loss_soft_celreturn loss

分别利用上面的softccrossentroy和正常的crossentropy作为分类损失函数损失函数,对market1501进行行人重试别的训练,记录每个mini batch的train loss 、train accuracy、val loss 、val accuracy,在训练过程中将这些数据都保存起来,后期进行比对分析。训练的数据在这了:链接: https://pan.baidu.com/s/18jYFFd9LaPrbd72OdHjdpw  密码: hg9r

利用训练保留的数据进行后期分析比对,文件目录如下所示:

mat.py的代码如下:

import scipy.io
import matplotlib.pyplot as plt
# train_acc
# train_loss
# val_loss
# val_accsoft_res = scipy.io.loadmat('soft_mini_batch_data.mat')
soft_train_acc = soft_res['train_acc']tra_res = scipy.io.loadmat('tra_mini_batch_data.mat')
tra_train_acc = tra_res['train_acc']soft_acc_list = soft_train_acc[0].tolist()
train_acc_list = tra_train_acc[0].tolist()data_length = int(len( soft_acc_list )/10)
x_label = [ i for i in range(data_length) ]fig, ax = plt.subplots()
ax.plot( x_label, soft_acc_list[0:data_length],label = 'soft' )
ax.plot( x_label, train_acc_list[0:data_length], label = 'tra' )
ax.set_xlabel('mini batch num')
ax.set_ylabel('accuracy')
ax.set_title('god bless')
ax.legend()
plt.show()

这里比较了在不同的criterion下使用同样的方法,对同样的数据进行训练的过程中的几个数值的变化情况。这个代码只比较了每个Mini batch的准确率情况。对比图如下所示:

多分类问题的soft cross entropy 损失函数相关推荐

  1. python损失函数实现_pytorch 实现cross entropy损失函数计算方式

    均方损失函数: 这里 loss, x, y 的维度是一样的,可以是向量或者矩阵,i 是下标. 很多的 loss 函数都有 size_average 和 reduce 两个布尔类型的参数.因为一般损失函 ...

  2. 目标检测分类损失函数——Cross entropy、Focal loss

    一.Cross Entropy Loss 交叉熵是用来判定实际的输出与期望的输出的接近程度,刻画的是实际输出与期望输出的距离,也就是交叉熵的值越小,两个概率分布就越接近. 1. CE Loss的定义 ...

  3. 为什么要返回softmax_为什么softmax搭配cross entropy是解决分类问题的通用方案?

    众所周知,softmax+cross entropy是在线性模型.神经网络等模型中解决分类问题的通用方案,但是为什么选择这种方案呢?它相对于其他方案有什么优势?笔者一直也困惑不解,最近浏览了一些资料, ...

  4. 交叉熵损失函数(Cross Entropy Loss)

    基础不牢,地动山摇,读研到现在有一年多了,发现自己对很多经常打交道的知识并不了解,仅仅是会改一改别人的代码,这使我感到非常焦虑,自此开始我的打基础之路.如果博客中有错误的地方,欢迎大家评论指出,我们互 ...

  5. 训练分类器为什么要用cross entropy loss(交叉熵损失函数)而不能用mean square error loss(MSE,最小平方差损失函数)?

    在一个人工智能群里,有人问起,训练分类器为什么要用cross entropy loss(交叉熵损失函数)而不能用mean square error loss(MSE,最小平方差损失函数)呢? 正好,在 ...

  6. Binary Cross Entropy真的适合多标签分类吗?

    个人曾在负责一个多标签文本分类项目时对于多标签分类(multi-label classification)的loss选择.forward尾层处理感到迷惑,当时查找了一下资料确定了一种方案: 1.以类别 ...

  7. 平均符号熵的计算公式_交叉熵(Cross Entropy)从原理到代码解读

    交叉熵(Cross Entropy)是Shannon(香浓)信息论中的一个概念,在深度学习领域中解决分类问题时常用它作为损失函数. 原理部分:要想搞懂交叉熵需要先清楚一些概念,顺序如下:==1.自信息 ...

  8. TensorFlow学习笔记(二十三)四种Cross Entropy交叉熵算法实现和应用

    交叉熵(Cross-Entropy) 交叉熵是一个在ML领域经常会被提到的名词.在这篇文章里将对这个概念进行详细的分析. 1.什么是信息量? 假设是一个离散型随机变量,其取值集合为,概率分布函数为 p ...

  9. TensorFlow四种Cross Entropy算法实现和应用

    交叉熵介绍 交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小,常见的Loss函数就是均方平方差(Mean Squared Er ...

最新文章

  1. Android中Handler消息机制
  2. python二维列表排序
  3. CStringArray序列化处理
  4. Python实现有道翻译
  5. 你从未听说过的最重要的数据库,人类登月计划的功臣
  6. Mysql和mono,.net – Mac OS X Mono和MySql连接器问题
  7. git使用记录_备忘
  8. Javascript中操作cookie
  9. sofa-pbrpc框架的简单使用
  10. ajax 弹框 示例,AJAX实现鼠标经过弹出详细介绍示例
  11. 磁盘工具无法修复磁盘怎么办
  12. How to disable cursor positioning and text selection in an EditText? (Android)
  13. Ethereum Casper 101
  14. 新疆职称英语和职称计算机,职称计算机考试题库
  15. 前程无忧招聘信息数据清洗+聚类分析
  16. NOD32升级ID获取器For流星无语
  17. pvq真值表_逻辑学真值表
  18. 设计模式常用的七大原则之③【依赖倒转】原则
  19. loglog()函数
  20. 电脑会员管理系统怎么弄,电脑会员卡管理系统怎么弄

热门文章

  1. mac 在 home 目录下创建文件夹
  2. android odex版本调试_Android开启odex开关和开机速度优化
  3. MD04 增加自定义列
  4. 青岛市两化融合的政策
  5. 数据依赖和控制依赖 Data Dependence and Contol Dependence
  6. 我,放弃外企高薪卖小龙虾创业,不到一年就后悔了……
  7. 文献阅读(52)—— Integration self-attention and convolution
  8. 数据结构与算法--学习路线
  9. sql server给表新建约束提示 表不存在或者没有权限#找不到对象“dbo.Student”,因为它不存在或者你没有所需的权限。
  10. sentry中的worker错误解决[ERROR] sentry.errors.events: preprocess.failed.empty