Pytorch系列:Pytorch的简单操作(一) ---- Pytorch的优势机制

一、计算图与动态机制

        计算图是一个表示运算的有向无环图。如果学过图论,应该对有向无环图这个概念很熟悉。一个有向无环图包含“结点”和“边”。TensorFlow和PyTorch都用到计算图。Pytorch中结点表示数据,如向量、矩阵、张量等。边表示运算,如加减乘除等。TensorFlow的数据流图中结点表示数学操作,也可以宝表示数据输入的起点和输出的终点。线表示结点之间的输入/输出关系。是数据的流向。下面分别列举了Pytorch和Tensorflow的计算图。
Pytorch系列:Pytorch的简单操作(一) ---- Pytorch的优势机制_第1张图片

Pytorch系列:Pytorch的简单操作(一) ---- Pytorch的优势机制_第2张图片
        PyTorch采用的是动态图机制,动态图机制更符合我们编程的思维,运算与搭建同时进行,更灵活,易调节。与动态图对应的是静态图机制,先搭建图,在进行运算。当然静态图有静态图的好处,静态图的效率更高。我个人觉得,综合考虑,动态图更优一些。因此,TensorFlow2.0 版本也使用了动态图机制。简单的说,动态图机制就是我们出去旅游,一边有玩一边思考下一步我们应该去哪。而静态图则是提前做好攻略。按照计划去走。

二、自动求导机制

        神经网络的最重要的内容之一,就是反向传播的更新参数,在这一过程需要求导参数变量的梯度。Pytorch可以进行自动求导。autograd包为张量上的所有操作提供了自动求导机制,是一个运行时定义的框架,意味着反向传播时根据代码如何运行来决定的,并且每次迭代都可以是不同的。
下面我们介绍一些自动求导操作的相关属性。

  • torch.Tensor:是autograd包的核心类
  • .requires_grad:属性为True时,将会追踪对该张量的所有所作,需要进行求梯度
  • .backward():计算完成后,调用此函数可以自动计算所有的梯度。
  • .grad:所有梯度将会累加到这个属性上。
  • …retain_graph:当设置为True时,保留计算图,因为计算图会被释放掉。
w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)

a = torch.add(w, x)
b = torch.add(w, 1)
y = torch.mul(a, b)

y.backward(retain_graph=True)
print(w.grad)
y.backward()
print(w.grad)
  • torch.autograd.grad(y, x):对函数进行求导,y是函数,x是求导的变量
x = torch.tensor([2.], requires_grad=True)
y = torch.pow(x, 3)     # y = x**3

grad_1 = torch.autograd.grad(y, x, create_graph=True)
print(grad_1)

grad_2 = torch.autograd.grad(grad_1[0], x)
print(grad_2)

你可能感兴趣的:(Pytorch学习)