Случайность в прогнозе VGG16 - PullRequest
0 голосов
/ 06 июня 2019

Я использую сеть VGG-16, доступную в pytorch из коробки, чтобы предсказать некоторый индекс изображения.Я обнаружил, что для одного и того же входного файла, если я предсказываю несколько раз, я получаю другой результат.Это кажется мне нелогичным.После прогнозирования весов (поскольку я использую предварительно обученную модель) не должно быть никакой случайности на любом шаге, и, следовательно, многократный прогон с одним и тем же входным файлом должен возвращать одно и то же предсказание.

Вот мой код:

import torch
import torchvision.models as models
VGG16 = models.vgg16(pretrained=True)
def VGG16_predict(img_path):
  transformer = transforms.Compose([transforms.CenterCrop(224),transforms.ToTensor()])
  data = transformer(Image.open(img_path))
  output = softmax(VGG16(data.unsqueeze(0)), dim=1).argmax().item()
  return output # predicted class index
VGG16_predict(image) 

Вот изображение

1 Ответ

3 голосов
/ 07 июня 2019

Напомним, что многие модули имеют два состояния для обучения по сравнению с оценкой: «Некоторые модели используют модули, которые имеют различное поведение при обучении и оценке, например, нормализацию партии. Для переключения между этими режимами используйте model.train () или model.eval (), в зависимости от ситуации. Подробности смотрите в train () или eval (). "(https://pytorch.org/docs/stable/torchvision/models.html)

В этом случае слои классификатора включают выпадение, которое является стохастическим во время обучения. Запустите VGG16.eval(), если хотите, чтобы оценки были не случайными.

...