Pytorch入门——Autograd:自动分化

在上一篇博客已经对Pytorch的Tensor进行了快速介绍,本章将继续学习autograd包。autograd包是PyTorch所有神经网络的核心,为Tensors上的所有操作提供了自动区分。同时,它也是一个逐个运行的框架,意味着backprop由代码运行定义,每一次迭代都可以不同,下面进行一一介绍autograd包中的变量和梯度。1.变量autograd.Variable是包的中央类,包含一个

在上一篇博客已经对Pytorch的Tensor进行了快速介绍,本章将继续学习autograd包。autograd包是PyTorch所有神经网络的核心,为Tensors上的所有操作提供了自动区分。同时,它也是一个逐个运行的框架,意味着backprop由代码运行定义,每一次迭代都可以不同,下面进行一一介绍autograd包中的变量和梯度。

1.变量

autograd.Variable是包的中央类,包含一个张量,并支持几乎所有定义的操作,在完成计算后,调用.backward()并自动计算所有梯度。可以通过.data属性访问原始张量,而将此变量的梯度累加到.grad;还有一个类对于autograd实现非常重要 - a Function
这里写图片描述
VariableFunction互连并建立一个非循环图,编码完整的计算历史。 每个变量都有一个.grad_fn属性,它引用了一个已经创建了VariableFunction(除了用户创建的变量代替creator is None)。

如果要计算导数,可以在变量上调用.backward()。 如果Variable是一个标量(即它包含一个元素数据),则不需要为backward()指定任何参数,但是如果它有更多元素,则需要指定一个grad_output参数,该参数是匹配形状的张量。

导入autograd包及Variable

import torch
from torch.autograd import Variable

创建一个变量

x = Variable(torch.ones(2, 2), requires_grad=True)
print(x)
#输出:
Variable containing:
 1  1
 1  1
[torch.FloatTensor of size 2x2]

对变量x做运算操作,如加法操作

y = x + 2
print(y)
#输出:
Variable containing:
 3  3
 3  3
[torch.FloatTensor of size 2x2]

y由于加法操作造成的,所以拥有一个creator

print(y.creator)
#输出:
<torch.autograd._functions.basic_ops.AddConstant object at 0x7fc150635138>

对y进行更多的操作

z = y * y * 3
out = z.mean()
print(z, out)
#输出:
(Variable containing:
 27  27
 27  27
[torch.FloatTensor of size 2x2]
, Variable containing:
 27
[torch.FloatTensor of size 1]
)

2.梯度

backprop out.backward()相当于做了out.backward(torch.Tensor([1.0]))

out.backward()
print(x.grad)
#输出:
Variable containing:
 4.5000  4.5000
 4.5000  4.5000
[torch.FloatTensor of size 2x2]

梯度求解过程可以具体参考官网文档
可以用autograd做更多运算

x = torch.randn(3)
x = Variable(x, requires_grad=True)
y = x * 2
while y.data.norm() < 1000:
    y = y * 2

print(y)
#输出:
Variable containing:
  230.3768
  323.7678
 1557.6053
[torch.FloatTensor of size 3]
gradients = torch.FloatTensor([0.1, 1.0, 0.0001])
y.backward(gradients)
print(x.grad)
#输出:
Variable containing:
  102.4000
 1024.0000
    0.1024
[torch.FloatTensor of size 3]

Variable 和 Function 可以参考官网文档


作者:YongqiangGao
原文链接:https://blog.csdn.net/u010510350/article/details/77619316

  • 发表于 2019-11-05 20:13
  • 阅读 ( 29 )
  • 分类:pytorch

0 条评论

请先 登录 后评论
不写代码的码农
YongqiangGao_csdn

0 篇文章

作家榜 »

  1. AI君 10 文章
  2. Tzung-Wen Liau 0 文章
  3. blairan 0 文章
  4. rookie 0 文章
  5. 陈凯 0 文章
  6. huanxue 0 文章
  7. admin 0 文章
  8. Lzs1998_csdn 0 文章