#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 они используют историческую статистику.