如何解决pytorch 交叉熵损失权重不起作用
我正在玩一些代码,但它的行为与我预期的不同。所以我把它简化为一个最低限度的工作示例:
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
是否有一些我不知道的标准化正在发生?或者它可能被窃听了?
解决方法
在这个例子中,我添加了一个具有不同目标类的第二个 dataum,GridLayout
的效果是可见的。
weights
这种效果是因为“损失在每个小批量的观察中平均。如果指定了权重参数,那么这是一个加权平均值”,但仅限于小批量。
我个人觉得这有点奇怪,并且认为全局应用权重会很有用(即,即使每个小批量中不存在所有类)。权重参数的主要用途之一表面上是为数据集中代表性不足的类赋予更多权重,但通过这种公式,少数类仅对它们所在的小批量赋予更高的权重(其中,当然,比例很低,因为他们是少数族裔)。
无论如何,这就是 Pytorch 定义此操作的方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。