This is more a conceptual question… Consider:
NoGradGuard guard;
b -= lr * b.grad();
I know that NoGradGuard
will disable action recording for the next gradient calculation.
But how does it really works?
This is more a conceptual question… Consider:
NoGradGuard guard;
b -= lr * b.grad();
I know that NoGradGuard
will disable action recording for the next gradient calculation.
But how does it really works?
Hi,
It actually sets a global flag that is checked by the backend whenever an op is done on a variable.
The guard itself saved the current status and set it to false in the constructor. And restore the saved status in it’s destructor. That way it is similar to a with torch.no_grad():
block in python.