PyTorch中的CrossEntropyLoss()

💡 原文英文,约600词,阅读约需2分钟。
📝

内容提要

本文介绍了L1 Loss(MAE)、L2 Loss(MSE)、Huber Loss、BCE和Cross Entropy Loss的概念和用法。Cross Entropy Loss可以从输入张量和目标张量中计算出0D或更高维的零个或多个值(浮点数)。初始化参数包括权重、忽略索引、减少方式和标签平滑等。示例展示了使用类索引和类概率作为目标张量的情况。

🔎

延伸解读

目标张量类型:类索引与类概率的区分

在PyTorch的CrossEntropyLoss中,目标张量的类型取决于其形状是否与输入张量相同。若形状不同,则视为类索引(整数张量),此时无需对目标进行softmax;若形状相同,则视为类概率(浮点张量),且值应在[0,1]之间,并需要手动应用softmax。这一区分至关重要,错误使用会导致错误或非预期结果。

reduction参数对空张量行为的影响

当输入和目标张量为空时,reduction参数的选择会导致不同的返回值。具体而言,reduction='mean'时返回nan,而reduction='sum'或reduction='none'时返回-0。这一行为在数据预处理或边界情况下需特别注意,以避免训练中出现意外数值。

ignore_index参数的使用限制

ignore_index参数用于指定忽略的目标类别索引,默认值为-100。它仅适用于类索引目标,因此应保持为负值;若用于类概率目标,则会引发错误。正确使用该参数可以在训练中忽略某些类别(如填充标记),但需确保目标类型匹配。

weight参数对损失计算的影响

weight参数允许为每个类别分配不同的权重,默认值为None(即所有类别权重为1)。通过设置权重,可以调整各类别对总损失的贡献,例如在类别不平衡时提升少数类的重要性。示例中,设置权重后损失值发生变化,体现了其实际效果。

❓

Q&A

Cross Entropy Loss的主要用途是什么?

Cross Entropy Loss用于计算模型输出与目标之间的差异,常用于分类任务。

Cross Entropy Loss的初始化参数有哪些?

初始化参数包括权重、ignore_index、reduction和label_smoothing等。

如何处理目标张量与输入张量大小不同时的情况?

如果目标张量的大小与输入张量不同,则视为类索引;如果相同,则视为类概率。

在使用Cross Entropy Loss时,如何设置标签平滑?

标签平滑通过label_smoothing参数设置,值必须在[0, 1]之间。

Cross Entropy Loss在空输入时的返回值是什么?

空的输入和目标张量在reduction='mean'时返回nan,在reduction='sum'或'reduction='none'时返回-0。

Cross Entropy Loss如何处理类概率的目标张量?

类概率的目标张量应与输入张量大小相同,并且值应在[0, 1]之间。

🏷️

标签

➡️

继续阅读