[pytorch] PyTorch Hook
PyTorch Hook ¶ 为什么要引入hook? -> hook可以做什么? 都有哪些hook? 如何使用hook? 1. 为什么引入hook? ¶ 参考: Pytorch中autograd以及hook函数详解 在pytorch中的自动求梯度机制(Autograd mechanics)中,如果将tensor的requires_grad设为True, 那么涉及到它的一系列运算将在反向传播中自动求梯度。 In [0]: x = torch.randn(5, 5) # requires_grad=False by default y = torch.randn(5, 5) # requires_grad=False by default z = torch.randn((5, 5), requires_grad=True) a = x + y b = a + z print(a.requires_grad, b.requires_grad) False True 但是自动求导的机制有个我们需要注意的地方: 在自动求导机制中只保存叶子节点,也就是中间变量在计算完成梯度后会自动释放以节省空间. 所以下面代码我们在计算过程中只得到了z对x的梯度,而y和z的梯度都在梯度计算后被自动释放了,所以显示为None. In [0]: x = torch.tensor([1,2],dtype