千家信息网

pytorch如何使用交叉熵损失函数

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍pytorch如何使用交叉熵损失函数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先必须将权重也转为Tensor的cuda格式;然后将该class_weigh
千家信息网最后更新 2025年01月20日pytorch如何使用交叉熵损失函数

这篇文章主要介绍pytorch如何使用交叉熵损失函数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

首先

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

然后

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

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

首先这个weight参数比想象中的要考虑的多

你可以试试下面代码

import torchimport torch.nn as nninputs = torch.FloatTensor([0,1,0,0,0,1])outputs = torch.LongTensor([0,1])inputs = inputs.view((1,3,2))outputs = outputs.view((1,2))weight_CE = torch.FloatTensor([1,1,1])ce = nn.CrossEntropyLoss(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

加权呢?

import torchimport torch.nn as nninputs = torch.FloatTensor([0,1,0,0,0,1])outputs = torch.LongTensor([0,1])inputs = inputs.view((1,3,2))outputs = outputs.view((1,2))weight_CE = torch.FloatTensor([1,2,3])ce = nn.CrossEntropyLoss(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

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

我们再验证一遍:

import torchimport torch.nn as nninputs = torch.FloatTensor([0,1,2,0,0,0,0,0,0,1,0,0.5])outputs = torch.LongTensor([0,1,2,2])inputs = inputs.view((1,3,4))outputs = outputs.view((1,4))weight_CE = torch.FloatTensor([1,2,3])ce = nn.CrossEntropyLoss(weight=weight_CE)# ce = nn.CrossEntropyLoss(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的计算说明

以上是"pytorch如何使用交叉熵损失函数"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0