从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()
那么,如果我使用上述代码保存了一个经过训练的模型,我如何检查保存的模型所使用的标准
您希望模型输出位于不同类之间有明确边界/阈值的分布之上。在LogSoftmax上应用CrossEntropyLoss会减少模型输出的有效范围,并且可能会对模型的学习速率产生不利影响
只需将损失和你的状态记录一起保存在字典中,或将其写入文本文件
TL;DR:你会降低模型的表现力,因为它只能产生相对平坦的分布
您在代码段中的建议实际上意味着应用softmax规范化两次。这将为您提供一个具有相同概率等级的分布,但它将更加平坦,并且它将防止模型使用低熵输出分布。线性层的输出在理论上可以是任意数。实际上,logit是正数和负数,这允许生成尖峰分布。在softmax之后,概率介于0和1之间,因此log softmax将给出负数
通常,保存模型时不使用丢失功能。除非你也明确地挽救了损失,否则就没有办法找到它
相关问题 更多 >
编程相关推荐