разные результаты при использовании модели для вывода из пакета и отдельного пользователя с помощью pytorch

#python #deep-learning #pytorch #training-data

#python #глубокое обучение #pytorch #обучение-данные

Вопрос:

У меня есть нейронная сеть, которая принимает входной тензор размерности (batch_size, 100, 1, 1) и выдает выходной тензор размерности (batch_size, 3, 64, 64). У меня разные результаты при использовании model для вывода по пакету из двух элементов и при выводе по элементам по отдельности.

С помощью приведенного ниже кода я инициализирую pytorch тензор размерности (2, 100, 1, 1). Я пропускаю этот тензор через модель, беру первый элемент вывода модели и сохраняю в переменной result1. Для result2 я просто напрямую запускаю первый элемент моего исходного тензора ввода через мою модель.

 inputbatch=torch.randn(2, Z_DIM, 1, 1, device=device)
inputElement=inputbatch[0].unsqueeze(0)

result1=model(inputbatch)[0]
result2=model(inputElement)
  

Я ожидал, что result1 и result2 будут одинаковыми. Но result1 и result2 совершенно разные. Кто-нибудь может объяснить, почему два вывода отличаются.

Ответ №1:

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

Чтобы протестировать вышесказанное, используйте:

 
model = model.eval()
  

перед получением result1 .

Комментарии:

1. Я думал, что случайность не будет проблемой, поскольку для одного и того же ввода я всегда получал один и тот же результат, который меня смущал.

2. @ArunJose_Intel Возможно, из-за пакетных нормоподобных слоев, которые выводят разные значения в зависимости от пакетной статистики в режиме train, в то время как в режиме eval они используют историческую статистику.