使用 nn.CrossEntropyLoss() 训练的网络的测试和置信度分数

Testing and Confidence score of Network trained with nn.CrossEntropyLoss()

我训练了一个具有以下结构的网络:

Intent_LSTM(
(attention): Attention()
(embedding): Embedding(34601, 400)
(lstm): LSTM(400, 512, num_layers=2, batch_first=True, dropout=0.5)
(dropout): Dropout(p=0.5, inplace=False)
(fc): Linear(in_features=512, out_features=3, bias=True)
)

现在我想测试这个经过训练的网络,并获得 classification 的置信度分数。 这是我当前的测试功能实现:

output = model_current(inputs)
pred = torch.round(output.squeeze())
pred = pred.argmax(dim=1, keepdim=True)

现在我的问题如下

  1. 这里 pred 只是来自我的网络的全连接层的输出,没有 softmax(根据损失函数的要求)。 this(pred = pred.argmax(dim=1, keepdim=True)) 是获得预测的正确方法吗?或者我应该将网络的输出传递给 softmax 层然后做 argmax?

  2. 如何获得置信度分数?我是否应该将网络的输出传递给 softmax 层和 select argmax 作为 class 的置信度?

  1. 在做 softmax 之前或之后选择 argmax 并不重要。因为任何最大化 softmax 的东西也会最大化 logits(pre-softmax)值。所以你应该得到相似的值。
  2. Softmax 将为您提供每个 class 的分数或概率。因此,进行 softmax 后的值可以用作置信度分数。