weight

更新时间:2022-12-26 17:22:15 阅读: 评论:0


2022年12月26日发(作者:2013年湖南高考)

pytorch交叉熵损失函数的weight参数的使⽤

⾸先

必须将权重也转为Tensor的cuda格式;

然后

将该class_weight作为交叉熵函数对应参数的输⼊值。

class_weight=ensor([0.13859937,0.5821059,0.63871904,2.30220396,7.1588294,0]).cuda()

补充:关于pytorch的CrossEntropyLoss的weight参数

⾸先这个weight参数⽐想象中的要考虑的多

你可以试试下⾯代码

importtorch

inputs=ensor([0,1,0,0,0,1])

outputs=nsor([0,1])

inputs=((1,3,2))

outputs=((1,2))

weight_CE=ensor([1,1,1])

ce=ntropyLoss(ignore_index=255,weight=weight_CE)

loss=ce(inputs,outputs)

print(loss)

tensor(1.4803)

这⾥的⼿动计算是:

loss1=0+ln(e0+e0+e0)=1.098

loss2=0+ln(e1+e0+e1)=1.86

求平均=(loss1*1+loss2*1)/2=1.4803

加权呢?

importtorch

inputs=ensor([0,1,0,0,0,1])

outputs=nsor([0,1])

inputs=((1,3,2))

outputs=((1,2))

weight_CE=ensor([1,2,3])

ce=ntropyLoss(ignore_index=255,weight=weight_CE)

loss=ce(inputs,outputs)

print(loss)

tensor(1.6075)

⼿算发现,并不是单纯的那权重相乘:

loss1=0+ln(e0+e0+e0)=1.098

loss2=0+ln(e1+e0+e1)=1.86

求平均=(loss1*1+loss2*2)/2=2.4113

⽽是

loss1=0+ln(e0+e0+e0)=1.098

loss2=0+ln(e1+e0+e1)=1.86

求平均=(loss1*1+loss2*2)/3=1.6075

发现了么,加权后,除以的是权重的和,不是数⽬的和。

我们再验证⼀遍:

importtorch

inputs=ensor([0,1,2,0,0,0,0,0,0,1,0,0.5])

outputs=nsor([0,1,2,2])

inputs=((1,3,4))

outputs=((1,4))

weight_CE=ensor([1,2,3])

ce=ntropyLoss(weight=weight_CE)

#ce=ntropyLoss(ignore_index=255)

loss=ce(inputs,outputs)

print(loss)

tensor(1.5472)

⼿算:

loss1=0+ln(e0+e0+e0)=1.098

loss2=0+ln(e1+e0+e1)=1.86

loss3=0+ln(e2+e0+e0)=2.2395

loss4=-0.5+ln(e0.5+e0+e0)=0.7943

求平均=(loss1*1+loss2*2+loss3*3+loss4*3)/9=1.5472

可能有⼈对loss的CE计算过程有疑问,我这⾥细致写写交叉熵的计算过程,就拿最后⼀个例⼦的loss4的计算说明

以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

本文发布于:2022-12-26 17:22:15,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/35008.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:contents
下一篇:faint
标签:weight
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图