Autograd: 自动求导
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: 自动求导的更多相关文章
- Pytorch Autograd (自动求导机制)
Pytorch Autograd (自动求导机制) Introduce Pytorch Autograd库 (自动求导机制) 是训练神经网络时,反向误差传播(BP)算法的核心. 本文通过logisti ...
- 什么是pytorch(2Autograd:自动求导)(翻译)
Autograd: 自动求导 pyTorch里神经网络能够训练就是靠autograd包.我们来看下这个包,然后我们使用它来训练我们的第一个神经网络. autograd 包提供了对张量的所有运算自动求导 ...
- Pytorch学习(一)—— 自动求导机制
现在对 CNN 有了一定的了解,同时在 GitHub 上找了几个 examples 来学习,对网络的搭建有了笼统地认识,但是发现有好多基础 pytorch 的知识需要补习,所以慢慢从官网 API进行学 ...
- PyTorch官方中文文档:自动求导机制
自动求导机制 本说明将概述Autograd如何工作并记录操作.了解这些并不是绝对必要的,但我们建议您熟悉它,因为它将帮助您编写更高效,更简洁的程序,并可帮助您进行调试. 从后向中排除子图 每个变量都有 ...
- 『PyTorch x TensorFlow』第六弹_从最小二乘法看自动求导
TensoFlow自动求导机制 『TensorFlow』第二弹_线性拟合&神经网络拟合_恰是故人归 下面做了三个简单尝试, 利用包含gradients.assign等tf函数直接构建图进行自动 ...
- 『PyTorch』第三弹_自动求导
torch.autograd 包提供Tensor所有操作的自动求导方法. 数据结构介绍 autograd.Variable 这是这个包中最核心的类. 它包装了一个Tensor,并且几乎支持所有的定义在 ...
- PytorchZerotoAll学习笔记(三)--自动求导
Pytorch给我们提供了自动求导的函数,不用再自己再推导计算梯度的公式了 虽然有了自动求导的函数,但是这里我想给大家浅析一下:深度学习中的一个很重要的反向传播 references:https:// ...
- Pytorch Tensor, Variable, 自动求导
2018.4.25,Facebook 推出了 PyTorch 0.4.0 版本,在该版本及之后的版本中,torch.autograd.Variable 和 torch.Tensor 同属一类.更确切地 ...
- [深度学习] pytorch学习笔记(1)(数据类型、基础使用、自动求导、矩阵操作、维度变换、广播、拼接拆分、基本运算、范数、argmax、矩阵比较、where、gather)
一.Pytorch安装 安装cuda和cudnn,例如cuda10,cudnn7.5 官网下载torch:https://pytorch.org/ 选择下载相应版本的torch 和torchvisio ...
随机推荐
- 3.5 常用Linux命令
1.touch命令 touch命令用于创建空白文件或设置文件的时间,语法格式为"touch [参数] 文件名称". 2.mkdir命令 mkdir命令用于创建空白的目录,英文全称为 ...
- .net core 配置swagger
首先要现有一个asp.net webApi项目 这里就不赘述了,接下来就按下面的步骤进行即可(本文是基于swagger 1.0.0-rc3版本的配置) 1.在project.json中添加 swag ...
- Spring 源码(7)Spring的注解是如何解析的?
上一篇 https://www.cnblogs.com/redwinter/p/16196359.html 介绍了BeanFactoryPostProcessor的执行过程,这篇文章介绍Spring中 ...
- 做SaaS的程序员们,是时候关注企业架构了
SaaS赛道是一个超大赛道,足够容纳上万家服务商,不太可能有哪个服务商能满足所有场景,大部分SaaS服务商在某个垂直领域,提供差异化的产品和服务.SaaS产品大部分都是面向B端客户,少部分面向C端客户 ...
- form表单,css简介,css选择器,css样式操作
form表单 简介 表单在Web网页中用以让访问者输入数据,当提交表单时,表单中输入的数据被打包传递给Web服务器端的程序 以处理,从而使得Web服务器与用户之间具有交互功能. 表单实现前后台交互:用 ...
- KLOOK客路旅行基于Apache Hudi的数据湖实践
1. 业务背景介绍 客路旅行(KLOOK)是一家专注于境外目的地旅游资源整合的在线旅行平台,提供景点门票.一日游.特色体验.当地交通与美食预订服务.覆盖全球100个国家及地区,支持12种语言和41种货 ...
- zabbix 线路质量监控自定义python模块,集成ICMP/TCP/UDP探测,批量监控线路质量自定义阈值联动mtr保存线路故障日志并发送至noc邮箱
互联网故障一般表现为丢包和时延增大,持续性故障不难排查,难的是间歇性或凌晨故障,后者往往来不及等我们测试就已经恢复正常,得不到异常时的mtr无法判断故障点在哪里 故此有了根据丢包率和时延变换联动mtr ...
- 被迫开始学习Typescript —— vue3的 props 与 interface
vue3 的 props Vue3 的 props ,分为 composition API 的方式以及 option API 的方式,可以实现运行时判断类型,验证属性值是否符合要求,以及提供默认值等功 ...
- 使用MinIO搭建对象存储服务
1.MinIO是什么? MinIO 是一款高性能.分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件.即X86等低成本机器也能够很好的运行MinIO. MinIO与传统的存储和其 ...
- Sass预处理器
CSS预处理器 less,sass和stylus sass:较早,缩进风格 scss:完全兼容css3,使用大括号 编写css的编程语言,引入变量,函数,重复代码等功能,如果编译成css文件 Sass ...