多 class classifcation 与 Pytorch

Multi class classifcation with Pytorch

我是 Pytorch 的新手,我需要澄清多类分类。

我正在微调 DenseNet 神经网络,因此它可以识别 3 种不同的 类。

因为是multiclass问题,所以我要这样替换分类层:

kernelCount = self.densenet121.classifier.in_features
self.densenet121.classifier = nn.Sequential(nn.Linear(kernelCount, 3), nn.Softmax(dim=1))

并使用CrossEntropyLoss作为损失函数:

loss = torch.nn.CrossEntropyLoss(reduction='mean')

通过阅读Pytorch 论坛,我发现CrossEntropyLoss 在神经网络的输出上应用了softmax 函数。这是真的?我应该从网络结构中删除 Softmax 激活函数吗?

那么测试阶段呢?如果包含,我必须在模型的输出上调用 softmax 函数?

在此先感谢您的帮助。

是的,CrossEntropyLoss 隐式应用 softmax。您应该删除网络末端的 softmax 层,因为 softmax 不是 幂等的,因此应用它两次将是语义错误。

就evaluation/testing而言。请记住,softmax 是一个单调递增的操作(这意味着输出的相对顺序在您应用它时不会改变)。因此 argmax 在 softmax 之前和之后的结果将给出相同的结果。

你唯一可能想要在评估期间明确执行 softmax 的情况是,如果你出于某种原因需要实际的置信度值。如果需要,您可以在评估期间使用 torch.softmax 在网络输出上显式应用 softmax。