Expected object of type torch.LongTensor but found type torch.FloatTensor pytorch问题

在使用CrossEntropyLoss时,常会出现如题的错误。

错误指出,要用longtensor而不是floattensor,于是

per_label = per_label.long()

outputs = outputs.long()

将神经网络输出和目标label都转换为longtensor,发现又会出现新问题。

如果是这种情况,我们应该检查输入的标签是0,1格式的,还是0-(C-1)这种格式的,CrossEntropyLoss只适用于0-(c-1)这种格式,如果标签设置为(0,1)格式,请用MultiLabelSoftMarginLoss,即

criterion = nn.MultiLabelSoftMarginLoss()

发现问题解决。

你可能感兴趣的:(Expected object of type torch.LongTensor but found type torch.FloatTensor pytorch问题)