在使用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()
发现问题解决。