PyTorch中的CrossEntropyLoss()
内容提要
本文介绍了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]之间。