【问题标题】:Multi class classifcation with Pytorch使用 Pytorch 进行多类分类
【发布时间】:2020-07-11 07:10:21
【问题描述】:

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

我正在微调 DenseNet 神经网络,使其可以识别 3 个不同的类别。

因为是多类问题,所以只好这样替换分类层:

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函数吗?

提前感谢您的帮助。

【问题讨论】:

    标签: pytorch loss-function softmax cross-entropy


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-29
      • 2021-05-09
      • 1970-01-01
      • 2021-11-13
      • 2019-07-07
      • 2021-01-31
      • 2020-01-19
      • 1970-01-01
      • 2018-05-02
      相关资源
      最近更新 更多