首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火炬分类中交叉熵损失的计算

火炬分类中交叉熵损失的计算
EN

Stack Overflow用户
提问于 2019-09-23 13:41:36
回答 1查看 1.4K关注 0票数 2

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

代码语言:javascript
复制
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_NumberBatch_sizeDimension_Output。对于我的代码,这里是维度

代码语言:javascript
复制
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))
  • 目标值是否应该是一个热编码的?如果没有,我如何才能为损失函数提供一个名义功能?
  • 如果我使用改型输出,你能帮我为我的代码这样做吗?

我试图将这个损失函数用于我的两个神经网络。

提前谢谢你,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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将位于当前类的位置。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58063826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档