我现在正在复制以下模型,该模型输出action
并使用filter
来过滤不适当的候选人。
https://arxiv.org/abs/1702.03274
在此模型中,输出在最后一个softmax层之后被过滤。我们假设action_size==3
。因此密集和输出之后的输出asoftmax层如下。
output: [0.1, 0.7, 0.2]
filter: [0, 1, 1]
output*filter: [0, 0.7, 0.2]
但是在pytorch中,logsoftmax
首选NLLLoss
。所以我的输出如下。这没有意义。
output: [-5.4, -0.2, -4.9]
filter: [0, 1, 1]
output*filter: [0, -0.2, -4.9]
所以pytoroch不推荐vanilla Softmax
。我应该如何应用面具来消除特定的行为?
或者是否有香草Softmax的任何分类交叉熵损失函数?
此模块不能直接与NLLLoss一起使用,后者希望在Softmax和它自身之间计算Log。请改用Logsoftmax(它更快,具有更好的数值属性)。 http://pytorch.org/docs/master/nn.html#torch.nn.Softmax
答案 0 :(得分:0)
LogSoftmax的输出只是Softmax输出的日志。这意味着您只需调用torch.exp(output_from_logsoftmax)
即可获得与Softmax相同的值。
因此,如果我正确地阅读了您的问题,您将计算LogSoftmax,然后将其提供给NLLLoss并指数用于过滤。