分类任务中常用的Label smoothing
目录
1.Label smoothing的原理
2.pytorh中如何使用Label smoothing
3.适用场景
1.Label smoothing的原理
交叉熵损失(softmax cross Entropy)中,常用公式:
yi: 表示样本i的label,正类为1,负类为0;
pi:表示样本i预测为正类的概率;
Label Smothing:原来标签是1的位置变为1-a,其他原来是0的位置变为a/(K-1),a通常取0.1;
举个例子:
假设一个6分类任务,之前的标签y=【1,0,0,0,0,0】,经过a=0.1的smoothing 操作后,现在输入代码的标签变为了y=【0.9,0.02,0.02,0.02,0.02,0.02】;
2.pytorh中如何使用Label smoothing
在不加入Label smoothing这个技巧的时候,在pytorch中可以直接调用交叉熵loss:
import torch.nn as nn
criterion = nn.CrossEntropyLoss()
在加入该技巧后,已经有别人写好的代码(调用fast-reid中的代码):
def cross_entropy_loss(pred_class_outputs, gt_classes, eps, alpha=0.2):
'''
pred_class_outputs:backbone输出结果,如16张数据,95个类别,通过fc后,则该参数维度为【16,95】
gt_classes:真实标签,如16张数据,则该参数维度为【16】
eps:通过判断该参数来决定使用常规的label smoothing,还是使用自适应的label smoothing
alpha:label smoothing的参数;
'''num_classes = pred_class_outputs.size(1)if eps >= 0:smooth_param = epselse:# Adaptive label smooth regularizationsoft_label = F.softmax(pred_class_outputs, dim=1)smooth_param = alpha * soft_label[torch.arange(soft_label.size(0)), gt_classes].unsqueeze(1)log_probs = F.log_softmax(pred_class_outputs, dim=1)with torch.no_grad():targets = torch.ones_like(log_probs) #torch.ones_like返回一个填充了标量值1的张量targets *= smooth_param / (num_classes - 1)targets.scatter_(1, gt_classes.data.unsqueeze(1), (1 - smooth_param)) #target.scatter(dim, index, src)其将一个源张量(source)中的值按照指定的轴方向(dim)和对应的位置关系(index)逐个填充到目标张量(target)中loss = (-targets * log_probs).sum(dim=1)with torch.no_grad():non_zero_cnt = max(loss.nonzero(as_tuple=False).size(0), 1)loss = loss.sum() / non_zero_cntreturn loss
3.适用场景
label smoothing的作用主要是防止模型过拟合,加速模型收敛;
作者们亲测,label smoothing与mixup以及knowledge distillation一样,都是涨分的,模式识别、目标检测与语义分割,三大权威任务,不骗人。
引用来自:神经网络中的label smooth为什么没有火? - 知乎
相关论文:《Why dose smoothing help?》 https://arxiv.org/pdf/1906.02629.pdf
分类任务中常用的Label smoothing相关推荐
- 分类算法中常用的评价指标
转自: 分类算法中常用的评价指标 来自网络,备份勿忘! 对于分类器(分类算法),评价指标主要有:1)Precision:2)Recall:3)F-score;4)Accuracy;5)ROC;6)AU ...
- 二分类最优阈值确定_一文搞懂分类算法中常用的评估指标
导读 通常我们在解决某个问题的时候,会设计多种分类算法在训练的时候我们还会调节各种超参以及使用各种trick以获取最优的分类模型,那这时候我们应该如何来衡量这个最优呢? 分类算法的评估指标有很多种,选 ...
- 【AI面试】hard label与soft label,Label Smoothing Loss 和 Smooth L1 Loss
往期文章: AI/CV面试,直达目录汇总 [AI面试]NMS 与 Soft NMS 的辨析 [AI面试]L1 loss.L2 loss和Smooth L1 Loss,L1正则化和L2正则化 在一次询问 ...
- 一起学习ML和DL中常用的几种loss函数
摘要:本篇内容和大家一起学习下机器学习和深度学习中常用到的几种loss函数. 本文分享自华为云社区<[MindSpore易点通]网络实战之交叉熵类Loss函数>,作者:Skytier . ...
- Java输入/输出流体系中常用的流分类
java输入/输出流体系中常用的流分类 分类 字节输入流 字节输出流 字符输入流 字符输出流 抽象基类 InputStream OutputStream Reader Writer 访问文件 File ...
- 机器学习中常用的分类算法总结
分类算法 分类算法和回归算法是对真实世界不同建模的方法.分类模型是认为模型的输出是离散的,例如大自然的生物被划分为不同的种类,是离散的.回归模型的输出是连续的,例如人的身高变化过程是一个连续过程, ...
- 轴承故障诊断分类中常用的一些数据集介绍和获取方法
轴承故障诊断分类中常用的一些数据集介绍和获取方法 ------本文旨在学习过程中进行数据记录,仅供参考------ 做轴承故障诊断重要的是需要多个数据集,一些数据集是难获取的,-------
- 常用的分类问题中的损失函数
原文地址:https://redstonewill.com/1584/ (转自红色石头) 前言 在监督式机器学习中,无论是回归问题还是分类问题,都少不了使用损失函数(Loss Function).** ...
- CANoe/CANalyzer中常用CAPL诊断API分类总结与TFS应用示例
CANoe/CANalyzer中常用CAPL诊断API分类总结与TFS应用示例,总有你需要的CAPL API!
最新文章
- 比尔盖茨27年婚姻破裂,8000亿财产咋分配?
- (0031) iOS 开发之图片压缩
- 读书笔记-大型网站技术架构(核心原理与案例分析)
- 【瞎扯】 About Me
- 干货!Elasticsearch性能优化实战指南
- 二级c语言程序设计翻译,C语言程序设计报错英文翻译
- [BuildRelease]Mozilla Build Tools - Autoconf + GNU Make
- [20170203]克隆schema.txt
- 皮尔逊相关系数php,若两变量X和y之间的Pearson相关系数大于0.3且小于0.5,则说明()。...
- java jpg转换成pdf格式_Java pdf和jpg互转案例
- 国内三大常见核心期刊体系简介——CSSCI、CSCD与中文核心期
- win10如何禁止CDR软件访问网络的设置方法教程
- IIS部署,发布网站
- ppt画图画不下——调整ppt页面的大小
- 新彩虹世界密码系统是多少_希望最近的世界密码日是我们需要的最后一个
- java get方法使用_java中关于set()和get()方法的理解和使用
- 物联网之MQTT3.1.1和MQTT5协议 (4) PUBLISH报文
- 同花顺编程入门(一)
- 图片切换的一种简单的方式
- 全国大学高校基础信息 API 接口