💻 源码
"""
演示
    多分类交叉熵损失函数

介绍
    损失函数 也叫 成本函数/目标函数/代价函数/误差函数
    用来 衡量预测值和真实值的差距,从而衡量模型好坏,损失越小模型越好

多分类交叉熵损失
    公式:CrossEntropLoss = -Σy*log(softmax(y_logits))
    其中:y_logits是模型的原始输出/预测分数
        softmax(y_logits)是模型输出的概率分布,也就是每个类别的预测概率,最大概率对应预测类别
    注意:
        多分类交叉熵CrossEntropLoss里面有softmax运算,所以模型的输出层不需要softmax。
        但是如果要获取预测概率,则需要在模型输出的原始预测分数后面经过softmax
    应用:
        多分类问题,如:10个类别,预测图片属于哪一类
    API:
        nn.CrossEntropyLoss()

需要掌握:
    loss_fn = nn.CrossEntropLoss()
    loss = loss_fn(y_logits, y_true)

"""

# 导包
import torch
import torch.nn as nn

# 1.定义函数,演示 多分类交叉熵损失函数
# 注意:1.多分类交叉熵损失函数里面有softmax运算
# 2.多分类交叉熵nn.CrossEntropLoss支持真实值的one-hot编码和标签编码(默认)
def demo01():
    # 1.创建 样本的真实值,假设是一个三分类任务, 真实类别为[1,0,2,0],4个样本
    # 使用标签编码,1D
    y_true = torch.tensor([1,0,2,0], dtype=torch.long)    # 形状(batch_size,)
    # 2.创建 模型的预测分数y_logits, 模拟的
    # (4,3)
    y_logits = torch.tensor([[0.1,2.0,1.0],[0.2,0.5,0.3],[0.3,0.2,0.5],[0.5,0.2,0.3]]) # (batch_size, 3)
    # 3.创建 多分类交叉熵损失函数对象
    loss_fn = nn.CrossEntropyLoss()
    # 4.计算损失
    # y_logits: 2D(4, 3), y_true: 1D(4,)
    # print(f"y_logits.shape: {y_logits.shape}, y_true.shape: {y_true.shape}")
    loss = loss_fn(y_logits, y_true)
    print(f"多分类交叉熵损失函数:{loss}")

# 测试
if __name__ == '__main__':
    demo01()