将CrossEntropyLoss与LogSoftmax一起使用

2024-09-26 18:13:49 发布

您现在位置:Python中文网/ 问答频道 /正文

从Pytorch documentation开始,CrossEntropyLoss将LogSoftMax和NLLLoss组合在一个类中

但我很好奇;如果在我的分类器中同时使用CrossEntropyLoss作为criteria和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()

那么,如果我使用上述代码保存了一个经过训练的模型,我如何检查保存的模型所使用的标准


Tags: 模型model分类器documentation情况nnpytorchnum
2条回答

您希望模型输出位于不同类之间有明确边界/阈值的分布之上。在LogSoftmax上应用CrossEntropyLoss会减少模型输出的有效范围,并且可能会对模型的学习速率产生不利影响

只需将损失和你的状态记录一起保存在字典中,或将其写入文本文件

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

您在代码段中的建议实际上意味着应用softmax规范化两次。这将为您提供一个具有相同概率等级的分布,但它将更加平坦,并且它将防止模型使用低熵输出分布。线性层的输出在理论上可以是任意数。实际上,logit是正数和负数,这允许生成尖峰分布。在softmax之后,概率介于0和1之间,因此log softmax将给出负数

通常,保存模型时不使用丢失功能。除非你也明确地挽救了损失,否则就没有办法找到它

相关问题 更多 >

    热门问题