Должен ли я использовать torch.inference_mode() в методе прогнозирования даже при использовании model.eval()?Python

Программы на Python
Ответить
Anonymous
 Должен ли я использовать torch.inference_mode() в методе прогнозирования даже при использовании model.eval()?

Сообщение Anonymous »

Я следую книге «Глубокое обучение с PyTorch шаг за шагом», и у меня есть вопрос о методе прогнозирования в классе StepByStep (из этого репозитория: GitHub).
Текущая реализация:

Код: Выделить всё

def predict(self, x):
self.model.eval()
x_tensor = torch.as_tensor(x).float()
y_hat_tensor = self.model(x_tensor.to(self.device))

self.model.train()
return y_hat_tensor.detach().cpu().numpy()
Мой вопрос: должен ли я обернуть прямой проход с помощью torch.inference_mode() или torch.no_grad(), хотя я уже вызываю self.model.eval(), например:

Код: Выделить всё

def predict(self, x):
self.model.eval()
x_tensor = torch.as_tensor(x).float()

with torch.inference_mode():
y_hat_tensor = self.model(x_tensor.to(self.device))

self.model.train()
return y_hat_tensor.detach().cpu().numpy() # detach() is superfluous
Я понимаю, что model.eval() меняет поведение слоев, например исключение и пакетную нормализацию, но я считаю, что менеджер контекста все равно должен быть добавлен для повышения производительности и эффективности использования памяти.
Однако я не уверен, почему исходная реализация его не включает. Каковы здесь лучшие практики?


Подробнее здесь: https://stackoverflow.com/questions/798 ... sing-model
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»