当前位置:   article > 正文

torch.nn.CrossEntropyLoss_torch.nn.crossentropyloss()

torch.nn.crossentropyloss()

CrossEntropyLoss用于计算多分类问题的交叉熵损失。因为torch.nn.CrossEntropyLoss内置了Softmax运算,所以在使用torch.nn.CrossEntropyLoss作为损失函数时,不要在网络的最后添加Softmax层!!!label应为一个整数,而不是one-hot编码形式。


示例

  1. import torch
  2. '''
  3. 每一个样本都有一个标签,表示它的真实类别。在深度学习中,通常是分批进行训练。
  4. 对于一个N分类问题,样本的标签只可能是0、1、2 ... N-1
  5. 则对于一个3分类问题,样本的标签只可能是0或1或2。
  6. 当batch_size为5时,这一个batch的标签是一个形状为[batch_size]的tensor,即shape为[5]
  7. '''
  8. # 一个batch(batch_size=5)的标签
  9. label = torch.tensor([1, 2, 0, 1, 0])
  10. print(label.shape) # [5]
  11. '''
  12. 对于一个3分类问题,当训练时batch_size为5,
  13. 则深度网络对每一个batch的预测值是一个形状为[batch_size, classes]的tensor,即shape为[5, 3]
  14. 以深度网络对第一个样本的预测值[0.5, 0.8, -1.2]为例,
  15. 经过Softmax层后,得到[0.3949, 0.5330, 0.0721],表示深度网络认为第一个样本属于0,1,2这三类的概率分别是0.3949,0.5330, 0.0721
  16. '''
  17. predict = torch.tensor([[ 0.5, 0.8, -1.2],
  18. [-0.2, 1.8, 0.5],
  19. [ 0.3, 0.2, 0.7],
  20. [ 0.6, -0.8, -0.4],
  21. [-0.4, 0.2, 0.8]])
  22. print(predict.shape) # [5, 3]
  23. # 当reduction='none'时,输出是对每一个样本预测的损失
  24. loss_func = torch.nn.CrossEntropyLoss(reduction='none')
  25. loss = loss_func(predict, label)
  26. print(loss) # tensor([0.6292, 1.6421, 1.2228, 1.8790, 1.8152])
  27. # 当reduction='sum'时,输出是对这一个batch预测的损失之和
  28. loss_func = torch.nn.CrossEntropyLoss(reduction='sum')
  29. loss = loss_func(predict, label)
  30. print(loss) # tensor(7.1883)
  31. # 当reduction='mean'时,输出是对这一个batch预测的平均损失
  32. loss_func = torch.nn.CrossEntropyLoss(reduction='mean')
  33. loss = loss_func(predict, label)
  34. print(loss) # tensor(1.4377)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/878154
推荐阅读
相关标签
  

闽ICP备14008679号