关于Autogrand的几个概念:
叶子张量 :可以理解为是一个初始变量,如下图所示,只有x为叶子节点,y和z都是结果节点。
pytorch中只能计算叶子节点的梯度(x)。
grand VS grand_fn
grand : 该Tensor的梯度值,每次在计算backward时需要将前一时刻的梯度归零,否则梯度值会累加。
grand_fn :叶子节点通常为None,只有结果节点的grand_fn 才有效,用于指示梯度函数是哪种类型。
梯度函数:
torch.autograd.backward (tensors,grand_tensor = None,retain_graph = None, create_graph = False )
tensors : 用于计算梯度的tensor,torch.autograd.backward(x)== x.backward()
grand_tensor : 在计算矩阵的梯度时会用到,如果输出z是一个标量则不用传参,若z是矩阵则需要传参,shape一般需要和前面计算的tensors 保持一致。函数会自动把这个参数拉成一个行向量与求出的雅克比矩阵相称得到最后的梯度。详情可查看