跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
超小封装电容捷比信 · 专业器件主题站

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

本文指的是PyTorch官方网站上的教程,该教程分为五个基本模块来介绍PyTorch。为了避免文章太长,在五个博客文章中介绍了这五个模块。第1部分:关于PyTorch的简单知识第2部分:PyTorch的自动梯度计算第3部分:使用PyTorch构建神经网络第4部分:训练神经网络分类器第5部分:数据并行化本文与第2部分有关。第2部分:PyTorch的自动梯度计算autogradpackage是PyTorch中所有神经网络的核心。首先了解一些基本知识,然后开始训练第一个神经网络。 autogradpackage提供张量上所有操作的自动派生功能。它是一个按运行定义的框架,这意味着反向传播是根据代码运行条件定义的,并且每次迭代可能都不同。 1 Variable(Variable)autograd.Variable是此软件包的中心类。它包含一个Tensor并支持几乎所有操作。一旦完成计算,就可以调用.backward(),并且可以自动计算所有渐变。您可以使用.data属性访问原始张量。相对于变量的梯度值可以累积为.grad。还有一个对于实现自动渐变非常重要的类:函数变量和函数相互关联,并建立了一个非循环图。每个变量都有一个.grad_fn属性,该属性可以引用创建该变量的函数(那些用户创建的变量除外,它们的grad_fn为空)。如果要计算导数,可以在Variable上调用.backward()。如果变量是标量(仅一个元素),则无需为Backward()指定任何参数。但是,如果它具有多个元素,则需要确定grad_output参数(这是具有匹配形状的张量)。 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)/ dxprint(x.grad),您应该得到一个元素值为4.5的矩阵。您可以使用autograd做很多疯狂的事情。 x = torch.randn(3)x =变量(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)