交叉熵损失函数----CrossEntropyLoss()详解

交叉熵损失函数详解

pytorch中torch.nn.CrossEntropyLoss(weight=None, size_average=True),将LogSoftMaxNLLLoss集成到一个类中。
对其参数进行说明:
weight(tensor): 1-D tensor,n个元素,分别代表n类的权重,如果你的训练样本很不均衡的话,是非常有用的。默认值为None。
size_average=True:计算出的loss对mini-batch的大小取了平均。

Loss可以表述为以下形式:
在这里插入图片描述
当weight参数被指定的时候,loss的计算公式变为:
在这里插入图片描述
其输入维度如下:
Input: (N,C) C 是类别的数量,N为mini-batch大小。
Target: (N) N是mini-batch的大小,0 <= targets[i] <= C-1。
交叉熵更直白的解释参考

输入数据从二维至多维

此时情况参考pytorch文档中class torch.nn.NLLLoss2d(weight=None, size_average=True)[source]的介绍。

此时输入特征形状要求
Input: (N,C,H,W) N为mini-batch的大小,C是类的数量,H,W是其他维数。
Target: (N,H,W) where each value is 0 <= targets[i] <= C-1。

举例说明

当面对输入数据x:(mini-batch,seq_len,feature_dim),其中mini-batch为小批量的数目,seq_len是样本序列的长度,feature_dim是样本特征数。
经过网络输出为output:(mini-batch,seq_len,class_num),class_num为类别数。
标签值labels:(mini-batch,seq_len)

此时,output与labels不能直接输入nn.CrossEntropyLoss,要按照如下规则:

Input: (N,C,H,W) N为mini-batch的大小,C是类的数量,H,W是其他维数。
Target: (N,H,W) where each value is 0 <= targets[i] <= C-1。

对output数据进行维度变换。如下代码所示,将output的shape变为(batch_size, class_num, seq_len)即可。

output = output.permute(0, 2, 1)  # 第2维 与 第3维互换, output的shape变为(batch_size, class_num, seq_len)
loss_c = loss_fc(output, label)  # 计算分类损失   label的shape为(batch_size, seq_len)

其中permute函数用于调整张量(tensor)的维度顺序,其维度根据给定的参数顺序重新排列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值