计算图与动态图
一、計(jì)算圖
?
計(jì)算圖主要是描述運(yùn)算的有向無(wú)環(huán)圖,計(jì)算圖主要有兩個(gè)部分:結(jié)點(diǎn)和邊,節(jié)點(diǎn)可以表示數(shù)據(jù),邊表示數(shù)據(jù)的運(yùn)算。
葉子結(jié)點(diǎn): 用戶創(chuàng)建的結(jié)點(diǎn)稱為葉子結(jié)點(diǎn)
torch.Tensor: data、dtype、shape、device、requires_grad、grad、grad_fn、is_leaf
is_leaf: 指張量是否為葉子結(jié)點(diǎn)
grad_fn:? 用來(lái)記錄創(chuàng)建張量時(shí)所用的方法
?
二、動(dòng)態(tài)圖
?
動(dòng)態(tài)圖: 運(yùn)算和搭建同時(shí)進(jìn)行,主要特點(diǎn)為 靈活、易調(diào)節(jié)
靜態(tài)圖: 先搭建圖,后進(jìn)行運(yùn)算,主要特點(diǎn)為 高效、不靈活
>>> import torch >>> w = torch.tensor([1.],requires_grad=True) >>> x = torch.tensor([3.],requires_grad=True) >>> a = torch.add(w,x) >>> b = torch.add(w,1) >>> y = torch.mul(a,b) >>> y.backward() >>> print(w.grad) tensor([6.]) >>> print("is_leaf:",w.is_leaf,x.is_leaf,a.is_leaf,b.is_leaf,y.is_leaf) is_leaf: True True False False False >>> print("gradient:",w.grad,x.grad,a.grad,b.grad,y.grad) gradient: tensor([6.]) tensor([2.]) None None None >>> print("grad_fn:",w.grad_fn,x.grad_fn,a.grad_fn,b.grad_fn,y.grad_fn) grad_fn: None None <AddBackward0 object at 0x106007f28> <AddBackward0 object at 0x106007c88> <MulBackward0 object at 0x106007c18>?
?
?
?
?
?
?
?
?
?
?
?
總結(jié)
- 上一篇: Translating Embeddin
- 下一篇: autograd