吴恩达深度学习课程(计算图和pytorch动态计算梯度)

吴恩达深度学习课程(计算图和pytorch动态计算梯度) 计算图以及pytoch动态计算图代码构建

计算图

  • 初次接触计算图,还以为计算图是什么高深的东西,其就是表述了一个计算过程,是用来描述运算的有向无环图【图中自左向右计算,自有向左是一个反向传播过程】
  • 上图表示的计算过程就是 J=3*(a+b*c)

pytorch中的计算图自动构建

  • pytorch中的计算图dynamic computation graph(DCG)——即动态计算图
  • 下图为对上图中的计算图的pytorch代码实现
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import torch   
from torch.autograd import Variable   AAAdef DCG():   
    a = Variable(torch.Tensor([5]), requires_grad=True) # requires_grad 表示是否对其求梯度,默认是False   
    b = Variable(torch.Tensor([3]), requires_grad=True)   
    c = Variable(torch.Tensor([2]), requires_grad=True)   
    u = b*c   
    v = a+u   
    J = 3*v   
    J.backward()  # 进行反向传播,自动构建计算图   
    print(a.grad)   
    print(b.grad)   
    print(c.grad)   
    print(u.grad_fn)   
    print(v.grad_fn)   
    print(J.grad_fn)   
- 输出结果   
tensor([3.])   
tensor([6.])   
tensor([9.])   
<MulBackward0 object at 0x0000012FF265C208>   
<AddBackward0 object at 0x0000012FF265C208>   
<MulBackward0 object at 0x0000012FF265C208>   

pytorch中的一些参数说明

  • backward:当调用backward函数时,只有requires_grad为true以及is_leaf为true的节点才会被计算梯度,即grad属性才会被赋予值。

  • data: 变量中存储的值,如x中存储着1,y中存储着2,z中存储着3

  • requires_grad:该变量有两个值,True 或者 False,如果为True,则加入到反向传播图中参与计算。

  • grad:该属性存储着相关的梯度值。当requires_grad为False时,该属性为None。即使requires_grad为True,也必须在调用其他节点的backward()之后,该变量的grad才会保存相关的梯度值。否则为None

  • grad_fn:表示用于计算梯度的函数。返回值例子:<AddBackward0 object at 0x0000012FF265C208>

  • is_leaf:为True或者Falsejiedain,表示该节点是否为叶子节点。【只有是叶子结点才会存有梯度信息,否则grad为None】

  • retain_grad :执行该方法,可以保存计算过程中非叶子节点的梯度信息。 AAA

后记

  • 今天看到一句话,感觉还不错:观人与酒后,观人于忽略,观人于临财临富。
  • 现在突然想继续保持对网络安全的热枕,无论是社会工程还是纯技术。