首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火炬交叉熵损失权不起作用

火炬交叉熵损失权不起作用
EN

Stack Overflow用户
提问于 2021-05-21 15:12:27
回答 1查看 1.7K关注 0票数 0

我在玩一些代码,它的行为与我预期的不一样。所以我把它简化为一个最简单的例子:

代码语言:javascript
复制
import torch

test_act = torch.tensor([[2.,0.]])
test_target = torch.tensor([0])

loss_function_test = torch.nn.CrossEntropyLoss()
loss_test = loss_function_test(test_act, test_target)
print(loss_test)
> tensor(0.1269)

weights=torch.tensor([0.1,0.5])
loss_function_test = torch.nn.CrossEntropyLoss(weight=weights)
loss_test = loss_function_test(test_act, test_target)
print(loss_test)
> tensor(0.1269)

如您所见,无论是否存在权重,输出都是相同的。但我希望第二个输出是0.0127

有什么我不知道的正常化吗?或者它可能被窃听了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-21 15:33:27

在本例中,我使用不同的目标类添加了第二个数据管理,weights的效果是可见的。

代码语言:javascript
复制
import torch

test_act = torch.tensor([[2.,1.],[1.,4.]])
test_target = torch.tensor([0,1])

loss_function_test = torch.nn.CrossEntropyLoss()
loss_test = loss_function_test(test_act, test_target)
print(loss_test)
>>> tensor(0.1809)


weights=torch.tensor([0.1,0.5])
loss_function_test = torch.nn.CrossEntropyLoss(weight=weights)
loss_test = loss_function_test(test_act, test_target)
print(loss_test)
>>> tensor(0.0927)

这种影响是因为“每个小批的损失都是通过观察来平均的。如果指定了权重参数,那么这是一个加权平均值”,但只有在小批中。

就我个人而言,我觉得这有点奇怪,我认为在全球范围内应用权重是有用的(也就是说,即使每个小批中没有所有的类)。加权参数的一个显著用途表面上是给数据集中表示不足的类赋予更多的权重,但通过这种公式,少数类只在它们存在的小型批次中获得更高的权重(当然,这是一个很低的百分比,因为它们是少数类)。

在任何情况下,这就是毕道尔定义此操作的方式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67639540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档