1. 首页
  2. 教育
  3. 深度学习

基于PyTorch的深度学习入门教程之PyTorch的自动梯度计算

本文参考PyTorch官网的教程,分为五个基本模块来介绍PyTorch。为了避免文章过长,这五个模块分别在五篇博文中介绍。

本文参考PyTorch官网的教程,分为五个基本模块来介绍PyTorch。为了避免文章过长,这五个模块分别在五篇博文中介绍。

Part1:PyTorch简单知识

Part2:PyTorch的自动梯度计算

Part3:使用PyTorch构建一个神经网络

Part4:训练一个神经网络分类器

Part5:数据并行化

本文是关于Part2的内容。

Part2:PyTorch的自动梯度计算

autogradpackage是PyTorch中所有神经网络的核心。先了解一些基本知识,然后开始训练第一个神经网络。autogradpackage提供了Tensors上所有运算的自动求导功能。它是一个按运行定义(define-by-run)的框架,这意味着反向传播是依据代码运行情况而定义的,并且每一个单次迭代都可能不相同。

1变量(Variable)

autograd.Variable是这个package的中心类。它打包了一个Tensor,并且支持几乎所有运算。一旦你完成了你的计算,可以调用.backward(),所有梯度就可以自动计算。

你可以使用.data属性来访问原始tensor。相对于变量的梯度值可以被积累到.grad中。

基于PyTorch的深度学习入门教程之PyTorch的自动梯度计算

这里还有一个类对于自动梯度的执行是很重要的:Function(函数)

变量和函数是相互关联的,并且建立一个非循环图。每一个变量有一个.grad_fn属性,它可以引用一个创建了变量的函数(除了那些用户创建的变量——他们的grad_fn是空的)。

如果想要计算导数,可以调用Variable上的.backward()。如果变量是标量(只有一个元素),你不需要为backward()确定任何参数。但是,如果它有多个元素,你需要确定grad_output参数(这是一个具有匹配形状的tensor)。

importtorchfromtorch.autogradimportVariable

创建一个变量:

x=Variable(torch.ones(2,2),requires_grad=True)print(x)

对变量做一个运算:

y=x+2print(y)

y作为一个运算的结果被创建,所以它有grad_fn。

print(y.grad_fn)

在y上做更多的运算:

z=y*y*3out=z.mean()print(z,out)

2梯度(Gradients)

现在来做反向传播。out.backward()等价于out.backward(torch.Tensor([1.0]))。

out.backward()

打印梯度d(out)/dx

print(x.grad)

你应该会得到一个元素为4.5的矩阵。

你可以使用autograd做很多疯狂的事情。

x=torch.randn(3)x=Variable(x,requires_grad=True)y=x*2whiley.data.norm()<1000:y=y*2print(y)
gradients=torch.FloatTensor([0.1,1.0,0.0001])y.backward(gradients)print(x.grad)

责任编辑:xj

免责声明:本站旨在传递信息,不代表有传资讯的观点和立场。本站遵循行业规范,如转载您的文章未标注版权,请联系我们(QQ:78799268)改正。本站的原创文章,如若转载,请注明出处:http://www.ainoline.cn/jiaoyu/shenduxuexi/16573.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

在线咨询:点击这里给我发消息

邮件:78799268@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code