no_grad
не действует за пределами области действия "с".
Согласно этому ответу от модератора в блоге pytorch:
with torch.no_grad():
# No gradients in this block
x = self.cnn(x)
# Gradients as usual outside of it
x = self.lstm(x)
Это цель оператора with
в python. Переменная, используемая with
(здесь torch.no_grad()
), действует только в контексте with
, а не после. См. python do c для получения полной информации.