Тестирование и оценка достоверности сети, обученной с помощью nn.CrossEntropyLoss () - PullRequest
0 голосов
/ 10 января 2020

Я обучил сеть со следующей структурой:

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)
)

Теперь я хочу протестировать эту обученную сеть, а также получить оценку достоверности классификации. Вот моя текущая реализация тестовой функции:

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

Теперь мой вопрос таков:

  1. Здесь pred - это просто вывод из полностью подключенного слоя из моей сети без softmax (как того требует функция потерь). Является ли это (pred = pred.argmax (dim = 1, keepdim = True)) правильным способом получения прогнозов? Или я должен передать выходные данные из сети на слой softmax, а затем выполнить argmax?

  2. Как получить показатель достоверности? Должен ли я передать вывод из сети на слой softmax и выбрать argmax в качестве уверенности класса?

1 Ответ

1 голос
/ 10 января 2020
  1. Не имеет значения, выберете ли вы argmax до или после выполнения softmax. Потому что все, что максимизирует softmax, также максимизирует значения logits (pre-softmax). Таким образом, вы должны получить аналогичные значения.
  2. Softmax даст вам оценки или вероятности для каждого класса. Следовательно, значения после выполнения softmax можно использовать как доверительные оценки.
...