Я хочу выполнить двоичную классификацию и использовал DenseNet от Pytorch.
Вот мой код прогноза:
densenet = torch.load(model_path)
densenet.eval()
output = densenet(input)
print(output)
И вот результат:
Variable containing:
54.4869 -54.3721
[torch.cuda.FloatTensor of size 1x2 (GPU 0)]
Я хочу получить вероятности каждого класса. Что я должен делать?
Я заметил, что torch.nn.Softmax()
можно использовать, когда есть много категорий, как обсуждалось здесь.
Спасибо за ответ! Я попробовал, и он выдает два числа с плавающей запятой, что в сумме дает 1. Но я не уверен, что это так или нет.
Можете ли вы отредактировать свой пост с дополнительной информацией о print(model)
, чтобы мы могли видеть, каковы последние шаги в модели? Если в него уже встроен softmax, нет смысла переделывать его, но часто он остается открытым для пользователя при переподготовке. Обновлено: при загрузке с densenet = torchvision.models.densenet121()
этого не происходит. Поэтому, если вы не указали что-то еще, вы можете безопасно использовать Softmax для этого.
Да, его последний слой: (классификатор): Линейный (1920 -> 2). И спасибо за вашу помощь :). Я думаю, мне следует сначала изучить метод глубокого наклона, прежде чем я буду его использовать.
import torch.nn as nn
Добавьте слой softmax к слою классификатора: т.е. типичный:
num_ftrs = model_ft.classifier.in_features
model_ft.classifier = nn.Linear(num_ftrs, num_classes)
updated:
model_ft.classifier = nn.Sequential(nn.Linear(num_ftrs, num_classes),
nn.Softmax(dim=1))
Вы уже пробовали использовать для этого softmax?