pytorch多分类问题 CrossEntropyLoss()函数的输入size/shape不一致问题

在PyTorch的多分类任务中,使用CrossEntropyLoss时,输入的output和target尺寸不同。这是因为CrossEntropyLoss内部会对target进行独热编码,将类别标签转换为对应维度的向量,从而匹配output的尺寸,实现损失计算。因此,只需传入包含类别标签的target即可。
摘要由CSDN通过智能技术生成

在使用pytorch实现一个多分类任务的时候,许多多分类任务在训练过程中都会有如下的代码:

criterion = nn.CrossEntropyLoss()
loss = criterion(output, target)
# output.size : [batch_size, class_num]
# target.size : [batch_size]

许多的初学者会卡在这里,生出这样一个疑问:为什么输入的output.size和target.size是不一样的,这样如何计算损失值呢?因为根据损失函数的设计原理,损失值的计算应该如下图所示:
在这里插入图片描述
output应该和target的size是一一对应,才可以实现损失值的计算。
包括在官网上查看CrossEntropyLoss()函数的例子
在这里插入图片描述
也可以看到,依旧有size不匹配的例子。这是为什么呢?
这是因为在CrossEntropyLoss()函数的内部,会将传入的target转化为独热编码的格式,这样就会使target的size从[batch_size] =》 [batch_size, class_num]了。

故究其原因,就是CrossEntropyLoss()函数的内部会将target转化为独热编码,所以输入的时候直接将[batch_size] 的target(存放的是batch_size个对应类别标签) 输入进去即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值