backward()
- backward()只能用于 标量对向量 或 标量对标量 求导
- 当调用backward函数时,只有requires_grad为true以及is_leaf为true的节点才会被计算梯度,即grad属性才会被赋予值。
- 在执行z.backward(gradient)的时候,如果z不是一个标量,那么先构造一个标量的值:L = torch.sum(z*gradient),再计算关于L对各个leaf Variable的梯度。
pytorch的梯度计算以及backward方法
动态图 静态图 个人理解
- pytorch动态图,tensor运算与numpy运算相似,思路与实现类似普通python程序一样,参数需要自己保存,操作即python代码,
- pytorch动态图,执行时即重复执行python代码
- pytorch动态图,定义和执行同步。
- tensorflow静态图,定义图与执行图分离,参数不需要自己保存,操作不是python代码,参数和操作均保存在图中,
- tensorflow静态图,执行时不是执行python代码,tensorflow后端执行
- tensorflow静态图,定义图与执行图分离。一次定义图,多次执行