【问题标题】:Use CrossEntropyLoss with LogSoftmax将 CrossEntropyLoss 与 LogSoftmax 一起使用
【发布时间】:2020-10-23 19:10:57
【问题描述】:

来自 Pytorch documentation,CrossEntropyLoss 将 LogSoftMax 和 NLLLoss 结合在一个类中

但我很好奇;如果我们在分类器中同时使用 CrossEntropyLoss 和 LogSoftMax 会发生什么:

model_x.fc = nn.Sequential (nn.Linear(num_ftrs, 2048, bias=True), nn.ReLU(), 
                               nn.Linear(2048, 1024 ), nn.ReLU(),
                               nn.Linear(1024 ,256), nn.ReLU(),
                                nn.Linear(256 ,128), nn.ReLU(),
                               nn.Linear(128, num_labels),nn.LogSoftmax(dim = 1))

criterion = nn.CrossEntropyLoss()

如果我已经使用上面的代码保存了一个训练好的模型,我如何检查保存的模型使用的标准?

【问题讨论】:

    标签: python machine-learning pytorch


    【解决方案1】:

    TL;DR:你会降低模型的表现力,因为它只能产生相对平坦的分布。

    您在 sn-p 中的建议实际上意味着两次应用 softmax 归一化。这将为您提供具有相同概率等级的分布,但它会更平坦,并且会阻止模型使用低熵输出分布。线性层的输出理论上可以是任意数字。在实践中,logits 既是正数又是负数,这允许产生尖峰分布。在 softmax 之后,你的概率在 0 和 1 之间,所以 log-softmax 会给你负数。

    通常情况下,模型会在没有损失函数的情况下保存。除非您也明确保存了损失,否则无法找到它。

    【讨论】:

    • 谢谢金德里奇!虽然我不熟悉“模型的表现力”和“平面分布”这个术语,因为我还是这个领域的新手。但是,我会查找并研究它们。再次感谢!
    【解决方案2】:

    您希望您的模型输出在不同类之间存在明确边界/阈值的分布上。在 LogSoftmax 上应用 CrossEntropyLoss 会降低模型输出的有效范围,并且可以说它会对模型的学习速度产生不利影响。

    只需将损失与您的 state_dict 一起保存在字典中或将其写入文本文件。

    【讨论】:

      猜你喜欢
      • 2021-03-19
      • 1970-01-01
      • 2021-04-15
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多