-
2022-02-07 19:56:24
我们知道,softmax容易使模型过度自信过拟合,label smoothing作为一种改善方案可以提高模型的泛化能力。
label_smoothing
上篇博客推导过反向求导的结果如下softmax求导/label_smoothing求导/知识蒸馏求导
y ^ i = softmax ( z i ) = exp z i ∑ j = 1 K exp z j l o s s = − ∑ i = 1 N y i log y ^ i \hat{y}_i=\text{softmax}{(z_i)}=\frac{\exp{z_i}}{\sum_{j=1}^K\exp{z_j}}\\ loss=-\sum_{i=1}^Ny_i\log\hat{y}_i y^i=softmax(zi)=∑j=1Kexpzjexpziloss=−i=1∑Nyilogy^i
其中
y i = { 1 − ϵ i = t r u e ϵ K − 1 o t h e r w i s e y_i=\left\{\begin{array}{ll}{1-\epsilon} & {i=true} \\ {\cfrac{\epsilon}{K-1}} & {otherwise}\end{array}\right. yi=⎩⎨⎧1−ϵK−1ϵi=trueotherwise
求导结果与上面softmax相同
∂ l o s s ∂ z i = y ^ i − y i \frac{\partial{loss}}{\partial{z_i}}=\hat{y}_i-y_i ∂zi∂loss=y^i−yi
令导数等于0,将 y ^ i \hat{y}_i y^i代入
{ exp ( z i ) exp ( z i ) + ∑ j ≠ i exp ( z j ) = 1 − ϵ i = t r u e exp ( z i ) ∑ j exp ( z j ) = ϵ K − 1 i ≠ t r u e \left\{\begin{array}{ll} \cfrac{\exp{(z_i)}}{\exp{(z_i)}+\sum_{j\neq i}\exp{(z_j)}}=1-\epsilon & {i=true} \\ \cfrac{\exp{(z_i)}}{\sum_j\exp{(z_j)}}=\cfrac{\epsilon}{K-1} & {i\neq true}\end{array}\right. ⎩⎪⎪⎪⎨⎪⎪⎪⎧exp(zi)+∑j=iexp(zj)exp(zi)=1−ϵ∑jexp(zj)exp(zi)=K−1ϵi=truei=true
假定错误类别的概率相等,化简上式得:
{ z i = log ( ( 1 − ϵ ) ( K − 1 ) ϵ ) + z j i = t r u e z i = log ( ( 1 − ϵ ) ( K − 1 ) ϵ ) + z j i ≠ t r u e \left\{\begin{array}{ll} z_i=\log{\left({\cfrac{(1-\epsilon)(K-1)}{\epsilon}}\right)}+z_j & {i=true} \\ z_i=\log{\left({\cfrac{(1-\epsilon)(K-1)}{\epsilon}}\right)}+z_j & {i\neq true}\end{array}\right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧zi=log(ϵ(1−ϵ)(K−1))+zjzi=log(ϵ(1−ϵ)(K−1))+zji=truei=true
将 i ≠ t r u e i\neq true i=true时记为 α \alpha α得:
z i ∗ = { log ( ( 1 − ϵ ) ( K − 1 ) ϵ ) + α i = t r u e α i ≠ t r u e z_i^{*}=\left\{\begin{array}{ll} \log{\left({\cfrac{(1-\epsilon)(K-1)}{\epsilon}}\right)}+\alpha & {i=true} \\ \alpha & {i\neq true}\end{array}\right. zi∗=⎩⎪⎨⎪⎧log(ϵ(1−ϵ)(K−1))+ααi=truei=true
所以,使用label smoothing编码,损失函数为交叉熵的话,错误类别的logit不会要求是负无穷,当正确类别和错误类别的logit有一定误差,接近 log ( ( 1 − ϵ ) ( K − 1 ) ϵ ) \log{\left({\cfrac{(1-\epsilon)(K-1)}{\epsilon}}\right)} log(ϵ(1−ϵ)(K−1))的情况下,loss就会很小趋于0。
简单的label smoothing为什么能够涨点呢更多相关内容 -
label smoothing
2020-01-19 11:00:53这种标注做一个改动,假设我们给定Label Smoothing的值为0.1: [ 0 , 1 ] × ( 1 − 0.1 ) + 0.1 / 2 = [ 0.05 , 0.95 ] [0,1]×(1−0.1)+0.1/2=[0.05,0.95] [ 0 , 1 ] × ( 1 − 0 . 1 ) + 0 . 1 / 2 = [ 0 . 0...1. dirac函数
狄拉克(dirac)函数是一个广义函数,在物理学中常用其表示质点、点电荷等理想模型的密度分布,该函数在除了零以外的点取值都等于零,而其在整个定义域上的积分等于1。
————————————————
原文链接:https://baike.baidu.com/item/%E7%8B%84%E6%8B%89%E5%85%8B%CE%B4%E5%87%BD%E6%95%B0/5760582?fr=aladdin2. one-hot编码
2.1 one-hot 基本使用
# X shape (60,000 28x28), X_train.reshape(X_train.shape[0], -1)
保留第一维,其余的维度,重新排列为一维,-1等同于28*28,reshape后的数据是共60000行,每一行784个数据点。
to_categorical就是将类别向量转换为二进制(只有0和1)的矩阵类型表示。其表现为将原有的类别向量转换为独热(onehot)编码的形式。from keras.utils.np_utils import * #类别向量定义 b = [0,1,2,3,4,5,6,7,8] #调用to_categorical将b按照9个类别来进行转换 b = to_categorical(b, 9) print(b) 执行结果如下: [[1. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 1. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 1. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 1. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 1. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 1. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 1. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 1. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 1.]]
————————————————
版权声明:本文为CSDN博主「奔跑的小仙女」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43211132/article/details/961414092.2 one-hot在多分类中的不足
在使用softmax进行分类的过程中,输入结果属于某一类的概率为:
p ( k ∣ x ) = e x p ( z k ) ∑ i i = K e x p ( z i ) p(k|x)=\frac{exp(z_k)}{\sum_{i}^{i=K}exp(z_i)} p(k∣x)=∑ii=Kexp(zi)exp(zk)
使用的损失函数为:
l o s s = − ∑ k = 1 K q ( k ∣ x ) l o g ( p ( k ∣ x ) ) loss=−\sum_{k=1}^{K}q(k|x)log(p(k|x)) loss=−k=1∑Kq(k∣x)log(p(k∣x))z i z_i zi:也为logits,即未被归一化的对数概率;
p p p:predicted probability,预测的example的概率;
q q q:groundtruth probablity,真实的example的label概率;对于one-hot,真实概率为Dirac函数,即 q ( k ) = δ k , y q(k)=δ_{k,y} q(k)=δk,y,其中y是真实类别。
l o s s loss loss:Cross Entropy,采用交叉熵损失。具体的例子:
假设选用softmax交叉熵训练一个三分类模型,某样本经过网络最后一层的输出为向量 x = ( 1.0 , 5.0 , 4.0 ) x=(1.0, 5.0, 4.0) x=(1.0,5.0,4.0),对x进行softmax转换输出为:
p = ( exp ( x 1 ) ∑ i = 1 3 exp ( x i ) , exp ( x 2 ) ∑ i = 1 3 exp ( x i ) , exp ( x 3 ) ∑ i = 1 3 exp ( x i ) ) = [ 0.013 , 0.721 , 0.265 ] p=(\frac{\exp(x_1)}{\sum_{i=1}^3}\exp(x_i), \frac{\exp(x_2)}{\sum_{i=1}^3}\exp(x_i), \frac{\exp(x_3)}{\sum_{i=1}^3}\exp(x_i)) =[0.013, 0.721, 0.265] p=(∑i=13exp(x1)exp(xi),∑i=13exp(x2)exp(xi),∑i=13exp(x3)exp(xi))=[0.013,0.721,0.265]
假设该样本y=[0, 1, 0],那损失loss:
l o s s = ∑ i = 1 3 − y i ∗ log ( p i ) = 0.327 loss = \sum_{i=1}^{3}-y_i * \log(p_i)=0.327 loss=i=1∑3−yi∗log(pi)=0.327
按softmax交叉熵优化时,针对这个样本而言,会让0.721越来越接近于1,因为这样会减少loss,但是这有可能造成过拟合。可以这样理解,如果0.721已经接近于1了,那么网络会对该样本十分“关注”,也就是过拟合。换句话说:对于损失函数,我们需要用预测概率去拟合真实概率,而拟合one-hot的真实概率函数会带来两个问题:
- 无法保证模型的泛化能力,容易造成过拟合
- 全概率和0概率鼓励所属类别和其他类别之间的差距尽可能加大,而由梯度有界可知,这种情况很难adapt。会造成模型过于相信预测的类别。
另一种理解:
在分类任务中,我们通常对类别标签的编码使用 [ 0 , 1 , 2 , … ] [0,1,2,…] [0,1,2,…]这种形式。在深度学习中,通常在全连接层的最后一层,加入一个softmax来计算输入数据属于每个类别的概率,并把概率最高的作为这个类别的输入,然后使用交叉熵作为损失函数。这会导致模型对正确分类的情况奖励最大,错误分类惩罚最大。如果训练数据能覆盖所有情况,或者是完全正确,那么这种方式没有问题。但事实上,这不可能。所以这种方式可能会带来泛化能力差的问题,即过拟合。————————————————
- 原文链接:https://www.cnblogs.com/zyrb/p/9699168.html
- 原文链接:https://www.datalearner.com/blog/1051561454844661
3. Lable Smoothing
在2016年,Szegedy等人提出了inception v2的模型(论文:Rethinking the inception architecture for computer vision.)。其中提到了Label Smoothing技术,用以减轻这个问题。
y k L S = y k ( 1 − α ) + α u ( K ) (3.1) y_k^{LS}=y_k(1-\alpha)+\alpha u(K) \tag{3.1} ykLS=yk(1−α)+αu(K)(3.1)
在论文中,作者假定标签分类为均匀分布,故而(3.1)式又写成:
y k L S = y k ( 1 − α ) + α / K (3.2) y_k^{LS}=y_k(1-\alpha)+\alpha/K \tag{3.2} ykLS=yk(1−α)+α/K(3.2)
其中 K K K为类别数, α \alpha α为label smoothing引入的超参数, y k y_k yk在 K K K为正确类别时为 1,其余为0,也就是 y K ∈ { 0 , 1 } y_K \in \{0, 1\} yK∈{0,1}那么,公式(3.1)的交叉熵损失为:
可以认为:Loss 函数为分别对【预测label与真实label】【预测label与先验分布】进行惩罚。
3.1 一个具体的例子
我们先来看一下原理。
假设我们的分类只有两个,一个是猫一个不是猫,分别用1和0表示。Label Smoothing的工作原理是对原来的 [ 01 ] [0 1] [01]这种标注做一个改动,假设我们给定Label Smoothing的值为0.1:
[ 0 , 1 ] × ( 1 − 0.1 ) + 0.1 / 2 = [ 0.05 , 0.95 ] [0,1]×(1−0.1)+0.1/2=[0.05,0.95] [0,1]×(1−0.1)+0.1/2=[0.05,0.95]
可以看到,原来的 [ 01 ] [0 1] [01]编码变成了 [ 0.05 , 0.95 ] [0.05,0.95] [0.05,0.95]了。这个label_smoothing的值假设为 ϵ \epsilon ϵ,那么就是说,原来分类准确的时候, p = 1 p=1 p=1,不准确为 p = 0 p=0 p=0,现在变成了 p 1 = 1 − ϵ , p 0 = ϵ p_1=1-\epsilon, p_0=\epsilon p1=1−ϵ,p0=ϵ,也就是说对分类准确做了一点惩罚。————————————————
- 原文链接:https://www.datalearner.com/blog/1051561454844661
- 论文链接:https://arxiv.org/abs/1512.00567
- 原文链接:https://www.cnblogs.com/zyrb/p/9699168.html
- 原文链接:https://www.datalearner.com/blog/1051561454844661
3.2 公式推导
import torch K = 10 alpha = 0.1 lr = 0.1 a_num = torch.randn((K,)).float() for i in range(40000): a = torch.autograd.Variable(a_num, requires_grad=True) b = torch.exp(-a) c = alpha / K * a.sum() + torch.log(1 + b.sum()) c.backward() a_num = a_num - lr * a.grad print(a_num, c) #output: tensor([4.4995, 4.4995, 4.4995, 4.4995, 4.4995, 4.4995, 4.4995, 4.4995, 4.4995, # 4.4995]) tensor(0.5553, grad_fn=<AddBackward0>)
-
模型优化之Label Smoothing
2022-03-08 20:20:23Label Smoothing 又被称之为标签平滑,常常被用在分类网络中来作为防止过拟合的一种手段,整体方案简单易用,在小数据集上可以取得非常好的效果。 Label Smoothing 做为一种简单的训练trick,可以通过很少的代价(只...1. 引言
Label Smoothing 又被称之为标签平滑,常常被用在分类网络中来作为防止过拟合的一种手段,整体方案简单易用,在小数据集上可以取得非常好的效果。
Label Smoothing 做为一种简单的训练trick,可以通过很少的代价(只需要修改target的编码方式),即可获得准确率的提升,本文就其原理和具体实现进行介绍,希望可以帮主大家理解其背后的具体原理。2. 初识
我们首先来看Label Smoothing的公式,在介绍之前我们先来观察一下传统的 one-hot encoding的公式,如下:
而Label Smoothing 导入了一个factor机制,公式改变如下:
只看公式,多少有些难懂,好嘛!我们来举个栗子瞧瞧啦。。。
不妨假设我们今天有四个类别,分别为dog,cat,bird,turtle,我们对其进行编码,即dog = 0 , cat = 1 , bird = 2 , turtle = 3
- 我们采用one-hot对其进行编码,结果如下:
dog = [ 1 , 0 , 0 , 0 ] cat = [ 0 , 1, 0 , 0 ] bird = [ 0 , 0 , 1 , 0 ] turtle = [ 0, 0 , 0 , 1 ]
- 采用Label smoothing对其编码,引入一个factor来将其几率分配给其他类别 ,这里假设factor = 0.1,则生成的标签如下:
dog = [ 0.9 , 0.03 , 0.03 , 0.03 ] cat = [ 0.03 , 0.9 , 0.03 , 0.03 ] bird = [ 0.03 , 0.03 , 0.9 , 0.03 ] turtle = [ 0.03 , 0.03 , 0.03 , 0.9 ]
3. 深入
有了上述直观的理解,相必大家对Label Smoothing有了简单的认识,接着我们来思考这样的改变会对损失函数带来什么样的影响。
为此我们先来看一下分类任务中最常见的cross entropy损失函数,如下:
接着我们使用上述四个类别,来看看正确分类时Loss的计算,如下:
观察上图可以看出,如果整体分类呈现正常梯度下降的话,使用Label Smoothing相比不使用的loss下降相对比较小。
那反过来,如果网络越学预测效果越差呢?
通过上图可以看出,就算训练阶段预测错误时使用Label Smoothing的loss也相比之前惩罚的更小(扣得更少)。4. 实现
我们来对Label Smoothing技术,作如下总结:
- 使用了Label Smoothing损失函数后,在训练阶段预测正确时 loss 不会下降得太快,预测错误的時候 loss 不会惩罚得太多,使其不容易陷入局部最优点,这在一定程度可以抑制网络过拟合的现象。
- 对于分类类别比较接近的场景,网络的预测不会过于绝对,在引入Label Smoothing技巧后,通过分配这些少数的几率也可以使得神经网络在训练的时候不这么绝对。
接着,我们来用Python对其实现,代码如下:
def label_smoothing(labels, factor=0.1): num_labels = labels.get_shape().as_list()[-1] labels = ((1-factor) * labels) + (factor/ num_labels) return labels
5. 经验分享
在实际调参的一些经验分享如下:
- 不管是在object detection的分类网络或者是多分类网络导入label smoothing皆有不错的效果,基本上算轻松又容易提升准确度的做法
- 当数据量足够多的时候,Label smoothing这个技巧很容易使网络变得欠拟和。
- factor通常设置为0.1,之前做对比实验试过使用0.2,0.3等参数,会发现皆无较好的效果,反而使网络变得难以收敛。
- 可以利用label smoothing的特性来做点微小的改动,比如遇上相似类型的事物时,可以将factor分配给相似的类别,而不是全部类别,这通常会有不错的效果。
6. 总结
本文对Label Smoothing技术进行了简单的介绍,通过简单的例子来增加大家的直观认识,最后分享了该技巧的代码实现。
您学废了吗?
关注公众号《AI算法之道》,获取更多AI算法资讯。参考: 论文
-
分类任务中常用的Label smoothing
2022-03-25 14:07:46分类任务中常用的Label smoothing,以及pytorch中的调用代码;目录
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 = eps else: # Adaptive label smooth regularization soft_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_cnt return loss
3.适用场景
label smoothing的作用主要是防止模型过拟合,加速模型收敛;
作者们亲测,label smoothing与mixup以及knowledge distillation一样,都是涨分的,模式识别、目标检测与语义分割,三大权威任务,不骗人。
相关论文:《Why dose smoothing help?》 https://arxiv.org/pdf/1906.02629.pdf
-
关于label smoothing(标签平滑)
2022-06-14 08:54:26label smoothing常用于分类任务,防止模型在训练中过拟合,提高模型的泛化能力。 -
label smoothing(标签平滑)
2021-06-19 11:24:11label smoothing是一种在分类问题中,防止过拟合的方法。 label smoothing(标签平滑)交叉熵损失函数在多分类任务中存在的问题label smoothing(标签平滑)参考资料 交叉熵损失函数在多分类任务中存在的问题 多... -
When Does Label Smoothing Help?
2022-04-13 15:56:35原文链接:When Does Label Smoothing Help? Hinton老师的这篇paper,说明了标签平滑策略为什么是有效的。 摘要 -
【Pytorch】Label Smoothing
2020-10-09 19:37:43理论介绍可以参考 【Inception-v3】《Rethinking the Inception Architecture for Computer Vision》 中的 4.5 Model Regularization via Label Smoothing 本质就是用右边(意会下就行)的标签替换左边的 one-hot ... -
标签平滑 label smoothing
2020-10-27 16:17:51文章目录简介什么是label smoothinglabel smoothing作用torch实现label smoothing 简介 label smoothing其实是机器学习和深度学习上比较常用的一个小 trick。 这里简单做一些记录。 什么是label smoothing 什么是... -
Label Smoothing标签平滑详解+Pytorch保姆级实际操作
2021-04-19 13:55:22Label Smoothing是一个帮助多分类模型进行正则化的操作。 从提出Label Smoothing的论文出发 "When Does Label Smoothing Help? "这篇文章指出Szegedy et al.提出了Label Smoothing. 因此我们就从Szegedy et al.的... -
关于label smoothing的理解
2022-04-06 20:34:00关于label smoothing的理解 背景介绍 提到label smoothing(标签平滑),首先介绍一下什么是hard label和soft label. 简单来说,hard label就是非1即0,不存在既可能是A也可能是B的情况,soft label则不同,它并不... -
目标检测的Tricks | 【Trick1】Label Smoothing
2022-04-16 22:46:03Label Smoothing的工作原理是对原来的[0 1]这种标注做一个改动,假设我们给定Label Smoothing的平滑参数为0.1: [0,1]×(1−0.1)+0.1/2=[0.05,0.95] 可以看到,原来的[0,1]标签成了[ 0.05 , 0.95 ] 了,那. -
标签平滑Label Smoothing
2019-09-03 09:36:24Lable Smoothing 是分类问题中错误标注的一种解决方法。 对于分类问题,特别是多分类问题,常常把向量转换成one-hot-vector(独热向量) one-hot带来的问题:(对于独热的简单解释:... -
从Label Smoothing和Knowledge Distillation理解Soft Label
2021-09-18 01:05:28每天给你送来NLP技术干货!来自:Smarter深度学习领域中,通常将数据标注为hard label,但事实上同一个数据包含不同类别的信息,直接标注为hard label会导致大量信息的损... -
【正则化】Label Smoothing详解
2021-03-13 20:17:27Label Smoothing(标签平滑),像 L1、L2 和 Dropout 一样,是一种正则化方法,通常用于分类问题,目的是防止模型在训练时过于自信地预测标签,改善泛化能力差的问题(也是解决错误标注的一种方法)。 2. Label ... -
标签平滑(label smoothing) torch和tensorflow的实现
2022-05-17 16:07:58def label_smoothing(inputs, epsilon=0.1): K = inputs.get_shape().as_list()[-1] # number of channels return ((1-epsilon) * inputs) + (epsilon / K) 代码的第一行是取Y的channel数也就是类别数,第二行... -
深度学习 | 训练网络trick——label smoothing(附代码)
2019-01-29 00:23:26如下图所示,label smoothing相当于减少真实样本标签的类别在计算损失函数时的权重,最终起到抑制过拟合的效果。 1.label smoothing将真实概率分布作如下改变: 其实更新后的分布就相当于往真实分布中... -
pytorch label smoothing代码
2019-09-04 15:31:35pytorch label smoothing代码 import torch import torch.nn as nn from torch.autograd import Variable import matplotlib.pyplot as plt import numpy as np class LabelSmoothing(nn.Module): # "Implemen.... -
深度学习学习笔记——label smoothing和mixup防止过拟合
2021-11-23 22:07:23label smoothing: 像L1、L2和dropout一样,是机器学习领域的一种正则化方法,通常用于分类问题,目的是防止模型在训练时过于自信地预测标签,改善泛化能力差的问题。防止过拟合,提升模型的泛化能力。 原来的真实值... -
标签平滑label smoothing
2019-11-12 13:41:19lable smoothing是分类问题中错误标注的一种解决方法。 对于分类问题,特别是多分类问题,常常把向量转换成one-hot-vector one-hot带来的问题: 对于损失函数,我们需要用预测概率去拟合真实概率,而拟合one-hot的... -
标签平滑论文笔记:2020《When Does Label Smoothing Help?》
2020-10-03 21:16:21实验: 数据集: CIFAR-10,CIFAR-100,ImageNet 网络结构: AlexNet,ResNet-56,Inception-v4 没有标签平滑(without label smoothing)记为 w/o LS。 第一行:CIFAR-10/AlexNet 上的“飞机”、“汽车... -
深度学习中的label smoothing
2019-08-03 18:32:53label smoothing: 交叉熵: H(p,q)=−∑i=1np(xi)log(q(xi)) H(p, q)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right) H(p,q)=−i=1∑np(xi)log(q(xi)) 其中p(xi)是真值, q(xi) ... -
标签平滑(label smoothing)
2021-11-24 17:00:48代码实现: def label_smoothing(inputs, epsilon=0.1): K = inputs.get_shape().as_list()[-1] # number of channels return ((1-epsilon) * inputs) + (epsilon / K) 代码的第一行是取Y的channel数也就是类别数... -
label smoothing pytorch版本
2018-12-15 22:22:27"Implement label smoothing. size表示类别总数 " def __init__(self, size, smoothing=0.0): super(LabelSmoothing, self).__init__() self.criterion = nn.KLDivLoss(size_average=False) #... -
【Pytorch】label smoothing
2019-07-03 08:54:13self.label_smoothing = label_smoothing self.LogSoftmax = nn.LogSoftmax() if label_smoothing > 0: self.criterion = nn.KLDivLoss(size_average=False) else: self.criterion = nn.NLLLoss(size_average... -
【trick技巧】label smoothing标签平滑的一些个人思考
2021-04-21 15:19:04解决方法 使用下面的 label smoothing 可以缓解这个问题: 原理:对于以Dirac函数分布的真实标签,我们将它变成分为两部分获得(替换) 其中,Dirac函数就是 在除了零以外的点函数值都等于零,而其在整个定义域上的...