Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算pytorch中分类的交叉熵损失_Python_Machine Learning_Neural Network_Pytorch - Fatal编程技术网

Python 计算pytorch中分类的交叉熵损失

Python 计算pytorch中分类的交叉熵损失,python,machine-learning,neural-network,pytorch,Python,Machine Learning,Neural Network,Pytorch,我试图建立两个神经网络进行分类。一个用于二进制分类,第二个用于多类分类。我试图使用torch.nn.CrossEntropyLoss()作为损失函数,但我尝试训练我的第一个神经网络,但我得到以下错误: multi-target not supported at /opt/conda/conda-bld/pytorch_1565272271120/work/aten/src/THNN/generic/ClassNLLCriterion.c:22 通过分析,我发现my dataset有两个问题导致

我试图建立两个神经网络进行分类。一个用于二进制分类,第二个用于多类分类。我试图使用
torch.nn.CrossEntropyLoss()
作为损失函数,但我尝试训练我的第一个神经网络,但我得到以下错误:

multi-target not supported at /opt/conda/conda-bld/pytorch_1565272271120/work/aten/src/THNN/generic/ClassNLLCriterion.c:22
通过分析,我发现my dataset有两个问题导致了错误

  • 我的数据集是一个热编码的。我使用了一个热编码来预处理我的数据集。第一个目标
    Y_binary
    变量的形状为
    torch.Size([125973,1])
    全是0和1,表示类“No”和“Yes”
  • 我的数据有错误的维度?我发现我不能使用带有交叉熵损失函数的简单向量。有些人在输入损失函数之前,使用以下代码重塑目标向量
out=out.permute(0,2,3,1).continuoused().view(-1,类号)

但我并不真正理解这段代码背后的原因。但对于我来说,我似乎需要跟踪以下变量:
类号
批量大小
维度输出
。对于我的代码,这里是维度

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))
  • 目标值是否应为一个热编码?如果不是,我如何将标称特征输入损耗函数
  • 如果我使用重塑输出,你能帮我做我的代码吗
我试着把这个损失函数用于我的两个神经网络


提前感谢您,

如果您要预测N个类中的1个类,则错误是由于使用了。对于多类分类,应使用在单个类中结合层和层的


在多类的情况下,如果您使用Sigmoid+BCELoss,那么您需要将目标设置为一个热编码,即每个示例都是这样的:
[0 1 0 0 0 1 0 1 0]
,其中1将位于当前类的位置。

那么如何解决此错误?torch.nn.CrossEntropyLoss()可以用于二进制分类吗?我没有完全理解您的答案。如果示例仅与一个类关联,请使用CrossEntropyLoss,否则,请使用BCEWithLogitsLoss(当您有多个类标签的示例时)。