Python Pyrotch交叉熵损失权重不工作

Python Pyrotch交叉熵损失权重不工作,python,pytorch,cross-entropy,Python,Pytorch,Cross Entropy,我在玩一些代码,它的行为与我预期的不同。所以我把它简化为一个简单的例子: 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

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

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,并且可以看到
权重的效果

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)
这种影响是因为“损失在每个小批量的观察中平均。如果指定了权重参数,则这是一个加权平均值”,但仅在小批量中

就我个人而言,我觉得这有点奇怪,我认为全局应用权重是有用的(即,即使每个小批量中不存在所有类)。权重参数的一个突出用途表面上是给数据集中代表性不足的类赋予更多的权重,但通过该公式,少数类仅对其存在的小批量赋予更高的权重(当然,这是一个低百分比,因为它们是少数类)


无论如何,这就是该操作的定义。

这是否回答了您的问题?