我正在尝试建立两个神经网络进行分类。一个用于二进制,另一个用于多类分类。我试图使用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))我试图将这个损失函数用于我的两个神经网络。
提前谢谢你,
发布于 2019-09-23 15:33:07
错误是由于使用了torch.nn.CrossEntropyLoss(),如果您想要预测N个类中的一个类,可以使用它。对于多类分类,应该使用torch.nn.BCEWithLogitsLoss(),它将乙状体层和BCELoss组合在一个类中。
在多类的情况下,如果您使用Sigmoid + BCELoss,那么您需要目标是一个热编码,即类似于每个样本:[0 1 0 0 0 1 0 0 1 0],其中1将位于当前类的位置。
https://stackoverflow.com/questions/58063826
复制相似问题