计算图,动态图与静态图
程序员文章站
2024-01-19 15:32:22
...
计算图
计算图是用来描述运算的有向无环图。计算图有两个主要元素:结点(Node) 和边(Edge)。结点表示数据,如向量,矩阵,张量;边表示运算,如加减乘除卷积等。
用计算图表示 y = ( x + w) * ( w + 1 )
拆分成 a = x + w ;b = w + 1 ;y = a * b
y对w求导,相当于找到计算图中所有y到w的路径,路径上的导数求积,路径间求和
叶子结点: 用户创建的结点,如x与w,梯度反向传播之后,非叶子节点的梯度会被释放掉,若想使用非叶子节点的梯度,可以用 retain_grad()
grad_fn: 记录创建该张量时所用的方法
w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)
a = torch.add(x, w)
a.retain_grad() # 保留非叶子节点的梯度
b = torch.add(w, 1)
y = torch.mul(a, b)
y.backward()
print(w.is_leaf, x.is_leaf, a.is_leaf, b.is_leaf, y.is_leaf)
print(w.grad, x.grad, a.grad, b.grad, y.grad)
print(w.grad_fn, x.grad_fn, a.grad_fn, b.grad_fn, y.grad_fn)
True True False False False
tensor([5.]) tensor([2.]) tensor([2.]) None None
None None <AddBackward0 object at 0x000001F812793A48> <AddBackward0 object at 0x000001F81278F4C8> <MulBackward0 object at 0x000001F821799148>
动态图VS静态图
根据计算图搭建方式,可将计算图分为动态图和静态图。
动态图:运算与搭建同时进行,灵活,易调节
静态图:先搭建图,后运算,高效,不灵活
PyTorch采用的是动态图机制,TensorFlow采用的是静态图机制。
下一篇: python做方差分析和卡方检验