Когда я хочу оценить производительность моей модели на проверочном наборе, предпочтительнее использовать:
with torch.no_grad:
Или
model.eval()
Используйте оба . Они делают разные вещи и имеют разные возможности.
with torch.no_grad
autograd
forward()
Документация torch.autograd.no_grad гласит:
torch.autograd.no_grad
Context-менеджер, который отключил [sic] расчет градиента. Отключение вычисления градиента полезно для вывода, когда вы уверены, что не будете звонить Tensor.backward(). Это уменьшит потребление памяти для вычислений, которые в противном случае имели бы requires_grad=True. В этом режиме результат каждого вычисления будет иметь requires_grad=False, даже если входные данные имеют requires_grad=True.
Context-менеджер, который отключил [sic] расчет градиента.
Отключение вычисления градиента полезно для вывода, когда вы уверены, что не будете звонить Tensor.backward(). Это уменьшит потребление памяти для вычислений, которые в противном случае имели бы requires_grad=True. В этом режиме результат каждого вычисления будет иметь requires_grad=False, даже если входные данные имеют requires_grad=True.
Tensor.backward()
requires_grad=True
requires_grad=False
Документация nn.Module.eval гласит:
nn.Module.eval
Устанавливает модуль в режим оценки. Это влияет только на определенные модули. Для получения подробной информации об их поведении в режиме обучения / оценки смотрите документацию конкретных модулей, например, Dropout, BatchNorm и т. Д.
Устанавливает модуль в режим оценки.
Это влияет только на определенные модули. Для получения подробной информации об их поведении в режиме обучения / оценки смотрите документацию конкретных модулей, например, Dropout, BatchNorm и т. Д.
Dropout
BatchNorm
Создатель pytorch сказал, что документация должна быть обновлена, чтобы предложить использование обоих .