我正在对我的数据集进行微调,它有多个标签。
我想将分类层的“分数”转换为概率,并使用这些概率来计算训练时的损失。
你能给出一个这样的示例代码吗?我可以这样使用吗:
P = net.forward(x)
p = torch.nn.functional.softmax(P, dim=1)
loss = torch.nn.functional.cross_entropy(P, y)
我不清楚这是不是正确的方法,因为我将概率作为交叉损失的输入。
发布于 2018-07-12 04:14:52
所以,你是在pytorch中训练一个具有交叉熵的model
,即resnet。您的损失计算将如下所示。
logit = model(x)
loss = torch.nn.functional.cross_entropy(logits=logit, target=y)
在这种情况下,您可以通过执行以下操作来计算所有类的概率:
logit = model(x)
p = torch.nn.functional.softmax(logit, dim=1)
# to calculate loss using probabilities you can do below
loss = torch.nn.functional.nll_loss(torch.log(p), y)
请注意,如果使用概率,则必须手动获取log
,由于数字原因,这是不好的。相反,使用log_softmax
或cross_entropy
,在这种情况下,您可能最终使用交叉熵和计算概率分别计算损失。
https://stackoverflow.com/questions/51291353
复制相似问题