Pytorch中神经网络包中最核心的是autograd包,我们先来简单地学习它,然后训练我们第一个神经网络。

autograd包为所有在tensor上的运算提供了自动求导的支持,这是一个逐步运行的框架,也就意味着后向传播过程是按照你的代码定义的,并且单个循环可以不同

我们通过一些简单例子来了解

Tensor

torch.tensor是这个包的基础类,如果你设置.requires_grads为True,它就会开始跟踪上面的所有运算。如果你做完了运算使用.backward(),所有的梯度就会自动运算,tesor的梯度将会累加到.grad这个属性。

若要停止tensor的历史纪录,可以使用.detch()将它从历史计算中分离出来,防止未来的计算被跟踪。

为了防止追踪历史(并且使用内存),你也可以将代码块包含在with torch.no_grad():中。这对于评估模型时是很有用的,因为模型也许拥有可训练的参数使用了requires_grad=True,但是这种情况下我们不需要梯度。

还有一个类对autograd的实现非常重要,——Function

Tensor和Function是相互关联的并一起组成非循环图,它编码了所有计算的历史,每个tensor拥有一个属性.grad_fn,该属性引用已创建tensor的Function。(除了用户自己创建的tensor,它们的.grad_fn为None)。

如果你想计算导数,可以在一个Tensor上调用.backward()。如果Tensor是一个标量(也就是只包含一个元素数据),你不需要为backward指明任何参数,但是拥有多个元素的情况下,你需要指定一个匹配维度的gradient参数。

import torch

创建一个tensor并设置rquires_grad=True来追踪上面的计算

x=torch.ones(2,2,requires_grad=True)
print(x) out:
tensor([[ 1., 1.],
[ 1., 1.]])

执行一个tensor运算

y=x+2
print(y)

out:
tensor([[ 3., 3.],
[ 3., 3.]])

y是通过运算的结果建立的,所以它有grad_fn

print(y.grad_fn)

out:
<AddBackward0 object at 0x000001EDFE054D30>

在y上进行进一步的运算

z=y*y*3
out=z.mean()
print(z,out)\ out:
tensor([[ 27., 27.],
[ 27., 27.]]) tensor(27.)

.requires_grad_(...)可以用内建方式改变tensor的requires_grad标志位。如果没有给定,输入标志默认为False

a=torch.randn(2,2)
a=((a*3)/(a-1))
print(a.requires_grad)
a.requires_grad_(True)
print(a.requires_grad)
b=(a*a).sum()
print(b.grad_fn)

out:
False
True
<SumBackward0 object at 0x000001EDFE054940>

Gradients

我们开始反向传播,因为out包含单一标量,out.backward()相当于out.backward(torch.tensor(1)).

out.backward()

打印梯度d(out)/dx

print(x.grad)

out:
tensor([[ 4.5000, 4.5000],
[ 4.5000, 4.5000]])

你应该得到一个4.5的矩阵。可以简单手动计算一下这一结果。

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

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

out:
tensor([  980.8958,  1180.4403,   614.2102])
gradients=torch.tensor([0.1,1.0,0.0001],dtype=torch.float)
y.backward(gradients)
print(x.grad)

out:
tensor([  102.4000,  1024.0000,     0.1024])

你可以将语句包含在with torch.no_grad()从Tensor的历史停止自动求导

print(x.requires_grad)
print((x**2).requires_grad)
with torch.no_grad():
print((x**2).requires_grad) out:
True
True
False

   

Autograd: 自动求导的更多相关文章

  1. Pytorch Autograd (自动求导机制)

    Pytorch Autograd (自动求导机制) Introduce Pytorch Autograd库 (自动求导机制) 是训练神经网络时,反向误差传播(BP)算法的核心. 本文通过logisti ...

  2. 什么是pytorch(2Autograd:自动求导)(翻译)

    Autograd: 自动求导 pyTorch里神经网络能够训练就是靠autograd包.我们来看下这个包,然后我们使用它来训练我们的第一个神经网络. autograd 包提供了对张量的所有运算自动求导 ...

  3. Pytorch学习(一)—— 自动求导机制

    现在对 CNN 有了一定的了解,同时在 GitHub 上找了几个 examples 来学习,对网络的搭建有了笼统地认识,但是发现有好多基础 pytorch 的知识需要补习,所以慢慢从官网 API进行学 ...

  4. PyTorch官方中文文档:自动求导机制

    自动求导机制 本说明将概述Autograd如何工作并记录操作.了解这些并不是绝对必要的,但我们建议您熟悉它,因为它将帮助您编写更高效,更简洁的程序,并可帮助您进行调试. 从后向中排除子图 每个变量都有 ...

  5. 『PyTorch x TensorFlow』第六弹_从最小二乘法看自动求导

    TensoFlow自动求导机制 『TensorFlow』第二弹_线性拟合&神经网络拟合_恰是故人归 下面做了三个简单尝试, 利用包含gradients.assign等tf函数直接构建图进行自动 ...

  6. 『PyTorch』第三弹_自动求导

    torch.autograd 包提供Tensor所有操作的自动求导方法. 数据结构介绍 autograd.Variable 这是这个包中最核心的类. 它包装了一个Tensor,并且几乎支持所有的定义在 ...

  7. PytorchZerotoAll学习笔记(三)--自动求导

    Pytorch给我们提供了自动求导的函数,不用再自己再推导计算梯度的公式了 虽然有了自动求导的函数,但是这里我想给大家浅析一下:深度学习中的一个很重要的反向传播 references:https:// ...

  8. Pytorch Tensor, Variable, 自动求导

    2018.4.25,Facebook 推出了 PyTorch 0.4.0 版本,在该版本及之后的版本中,torch.autograd.Variable 和 torch.Tensor 同属一类.更确切地 ...

  9. [深度学习] pytorch学习笔记(1)(数据类型、基础使用、自动求导、矩阵操作、维度变换、广播、拼接拆分、基本运算、范数、argmax、矩阵比较、where、gather)

    一.Pytorch安装 安装cuda和cudnn,例如cuda10,cudnn7.5 官网下载torch:https://pytorch.org/ 选择下载相应版本的torch 和torchvisio ...

随机推荐

  1. struts2绕过waf读写文件及另类方式执行命令

    之前碰到过好几次Struts2,还都是016,项目.众测都遇到过,每次都只是证明了一下存在,由于waf的存在,没有深入去利用,这里简单的记录下. 0x01 背景 xray或者Struts2漏扫可以扫到 ...

  2. Photoshop图片处理在线网页使用无需下载绿色

    今天给大家推荐一个ps在线版网页 实测使用效果不错,绿色简介,无需下载,不卡顿一般的电脑配置都可以带起来 因为是在线的所以是精简版的,但是一般ps软件有的工具,功能他都有,比较适合及时性使用 废话不多 ...

  3. 关于openstreet map的osm文件转shp文件方法(附arcgis10.2插件)

    一.下载并安装对应arcgis版本的osm插件 对应arcgis版本的osm转换插件在arcgis官网可以下载 http://www.arcgis.com/home/search.html?q=Arc ...

  4. Halo 开源项目学习(二):实体类与数据表

    基本介绍 Halo 项目中定义了一些实体类,用于存储博客中的关键数据,如用户信息.文章信息等.在深入学习 Halo 的设计理念与实现过程之前,不妨先学习一下一个完整的博客系统都由哪些元素组成. 实体类 ...

  5. XCTF练习题---MISC---embarrass

    XCTF练习题---MISC---embarrass flag:flag{Good_b0y_W3ll_Done} 解题步骤: 1.观察题目,下载附件,这道题真难 2. 拿到手以后默认使用Wiresha ...

  6. Django学习——图书相关表关系建立、基于双下划线的跨表查询、聚合查询、分组查询、F查询、Q查询、admin的使用、使用脚本调用Django、Django查看源生sql

    0 图书相关表关系建立 1.5个表 2.书籍表,作者表,作者详情表(垂直分表),出版社表,书籍和作者表(多对多关系) 一对一 多对多 本质都是一对多 外键关系 3.一对一的关系,关联字段可以写在任意一 ...

  7. FTP主动模式上传文件时返回"ftp: accept: Resource temporarily unavailable"

    FTP主动模式上传文件时返回 Passive mode off ftp: accept: Resource temporarily unavailable 这个问题要从ftp的2种模式说起 PORT ...

  8. 使用DSVPN解决分支网络出口为ADSL场景下的内网互通

    背景 最近接到一个项目是一家机构总部与多个分支之间的内网互通,总部具有固定ip,分部是使用adsl动态获取的不固定公网ip,由于两端互联网ip不固定所以不能使用传统的GRE技术来实现,所以最后经过评估 ...

  9. 自动化测试报告(allure/html)

    pytest有两种生成测试报告的方法(html和allure),今天就给大家一一介绍下 html 一.pytest-html基本语法 1.安装:pip install pytest-html 2.查看 ...

  10. css3常用动画

    //有道云笔记链接 http://note.youdao.com/s/72qbBVyv