我正在尝试建立两个用于分类的神经网络。一个用于二进制,第二个用于多类分类。我尝试使用torch.nn.CrossEntropyLoss()
作为损失函数,但是尝试训练我的第一个神经网络时,出现以下错误:
multi-target not supported at /opt/conda/conda-bld/pytorch_1565272271120/work/aten/src/THNN/generic/ClassNLLCriterion.c:22
根据我的分析,我发现我的数据集存在两个导致错误的问题。
Y_binary
的形状为torch.Size([125973, 1])
,形状为0和1,表示类“否”和“是”。 out = out.permute(0, 2, 3, 1).contiguous().view(-1, class_number)
但是我并不真正理解此代码背后的原因。但是对于我来说,我似乎需要跟踪以下变量:Class_Number
,Batch_size
,Dimension_Output
。对于我的代码,这是尺寸
X_train.shape: (125973, 122)
Y_train2.shape: (125973, 1)
batch_size = 64
K = len(set(Y_train2)) # Binary classification For multi class classification use K = len(set(Y_train5))
我正在尝试对我的两个神经网络都使用此损失函数。
先谢谢您
答案 0 :(得分:2)
该错误是由于使用了torch.nn.CrossEntropyLoss()所致,如果您要在N个类别中预测1个类别,可以使用该错误。对于多类分类,应使用torch.nn.BCEWithLogitsLoss(),它在一个单独的类中结合了Sigmoid层和BCELoss。
如果是多类,并且如果您使用Sigmoid + BCELoss,则您需要将目标设为单次编码,即每个样本类似这样:[0 1 0 0 0 1 0 0 1 0]
,其中1表示位置的课程数量。