【问题标题】:Why my deep nerual net descends slowly with softmax in the fully connected layer instead of without softmax in the fully connected layer?为什么我的深度神经网络在全连接层使用 softmax 而不是在全连接层使用 softmax 而下降缓慢?
【发布时间】:2020-10-16 17:01:21
【问题描述】:

我只是在构建一个深度神经网络,当全连接层没有激活函数(softmax)时,我发现我的网络收敛速度更快。但是当我添加这个 softmax 函数时,收敛性真的很差,甚至停止在非常高的损失中。顺便提一句。我使用交叉熵损失作为损失函数,使用 rmsprop 作为优化器。 Nerual network without last softmax activation

【问题讨论】:

  • 请以文本格式而不是图像格式分享您的代码。

标签: pytorch conv-neural-network softmax cross-entropy


【解决方案1】:

如果您使用交叉熵作为模型的损失函数,您必须确保您的最终输出是有效概率,即它们总和为 1、非负且在 (0,1) 中。

这是通过 softmax 激活来确保的,它会将最后一层的输出缩放到概率。如果您忽略此步骤,则您计算的损失不正确且不代表模型的收敛/学习。

【讨论】:

    【解决方案2】:

    CrossEntropyLoss 假设输入为 logits。所以概率不会起作用,因为它们——作为最明显的问题——将动态范围从 +/- inf 大幅降低到 .

    如果您希望网络的输出已经标准化,我强烈建议将LogSoftmax() 作为激活并结合NLLLoss 作为标准。

    由于数值原因,使用普通 softmax 进行训练是有风险的;如果下游任务需要概率,则可以轻松地对输出进行后处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 2018-12-04
      • 2016-10-02
      • 1970-01-01
      • 2021-07-14
      • 2012-11-14
      • 2021-07-25
      相关资源
      最近更新 更多