Autograd:自动微分
Autograd
1、深度学习的算法本质上是通过反向传播求导数,Pytorch的Autograd模块实现了此功能;在Tensor上的所有操作,Autograd都能为他们自动提供微分,避免手动计算导数的复杂过程。
2、autograd.Variable是Autograd中的核心类,它简单的封装了Tensor,并支持几乎所有Tensor操作;Tensor被封装为Variable之后,可以调用它的.backward()实现反向传播,自动计算所有的梯度。
3、Variable主要包含三个属性:
data:保存Variable所包含的Tensor;
grad:保存data对应的梯度,grad也是个Variable,而不是Tensor,它和data的形状一样;
grad_fn:指向一个Function对象,这个Function用来反向传播计算输入的梯度。
具体代码解析
- #_Author_:Monkey
- #!/usr/bin/env python
- #-*- coding:utf-8 -*-
- import torch as t
- from torch.autograd import Variable
- x = Variable(t.ones(2,2),requires_grad = True)
- print(x)
- '''''tensor([[1., 1.],
- [1., 1.]], requires_grad=True)'''
- y = x.sum()
- print(y)
- '''''tensor(4., grad_fn=<SumBackward0>)'''
- print(y.grad_fn) #指向一个Function对象,这个Function用来反向传播计算输入的梯度
- '''''<SumBackward0 object at 0x000002D4240AB860>'''
- y.backward()
- print(x.grad)
- '''''tensor([[1., 1.],
- [1., 1.]])'''
- y.backward()
- print(x.grad)
- '''''tensor([[2., 2.],
- [2., 2.]])'''
- y.backward()
- print( x.grad )
- '''''tensor([[3., 3.],
- [3., 3.]])'''
- '''''grad在反向传播过程中时累加的(accumulated),这意味着运行
- 反向传播,梯度都会累加之前的梯度,所以反向传播之前需要梯度清零'''
- print( x.grad.data.zero_() )
- '''''tensor([[0., 0.],
- [0., 0.]])'''
- y.backward()
- print( x.grad )
- '''''tensor([[1., 1.],
- [1., 1.]])'''
- m = Variable(t.ones(4,5))
- n = t.cos(m)
- print(m)
- print(n)
- '''''tensor([[1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1.]])
- tensor([[0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
- [0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
- [0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
- [0.5403, 0.5403, 0.5403, 0.5403, 0.5403]])'''
- m_tensor_cos = t.cos(m.data)
- print(m_tensor_cos)
- '''''ensor([[0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
- [0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
- [0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
- [0.5403, 0.5403, 0.5403, 0.5403, 0.5403]])'''
Autograd:自动微分的更多相关文章
- pytorch学习-AUTOGRAD: AUTOMATIC DIFFERENTIATION自动微分
参考:https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#sphx-glr-beginner-blitz-autog ...
- 【PyTorch深度学习60分钟快速入门 】Part2:Autograd自动化微分
在PyTorch中,集中于所有神经网络的是autograd包.首先,我们简要地看一下此工具包,然后我们将训练第一个神经网络. autograd包为张量的所有操作提供了自动微分.它是一个运行式定义的 ...
- PyTorch自动微分基本原理
序言:在训练一个神经网络时,梯度的计算是一个关键的步骤,它为神经网络的优化提供了关键数据.但是在面临复杂神经网络的时候导数的计算就成为一个难题,要求人们解出复杂.高维的方程是不现实的.这就是自动微分出 ...
- PyTorch 自动微分示例
PyTorch 自动微分示例 autograd 包是 PyTorch 中所有神经网络的核心.首先简要地介绍,然后训练第一个神经网络.autograd 软件包为 Tensors 上的所有算子提供自动微分 ...
- PyTorch 自动微分
PyTorch 自动微分 autograd 包是 PyTorch 中所有神经网络的核心.首先简要地介绍,然后将会去训练的第一个神经网络.该 autograd 软件包为 Tensors 上的所有操作提供 ...
- LibTorch 自动微分
得益于反向传播算法,神经网络计算导数时非常方便,下面代码中演示如何使用LibTorch进行自动微分求导. 进行自动微分运算需要调用函数 torch::autograd::grad( outputs, ...
- 附录D——自动微分(Autodiff)
本文介绍了五种微分方式,最后两种才是自动微分. 前两种方法求出了原函数对应的导函数,后三种方法只是求出了某一点的导数. 假设原函数是$f(x,y) = x^2y + y +2$,需要求其偏导数$\fr ...
- 自动微分(AD)学习笔记
1.自动微分(AD) 作者:李济深链接:https://www.zhihu.com/question/48356514/answer/125175491来源:知乎著作权归作者所有.商业转载请联系作者获 ...
- <转>如何用C++实现自动微分
作者:李瞬生转摘链接:https://www.zhihu.com/question/48356514/answer/123290631来源:知乎著作权归作者所有. 实现 AD 有两种方式,函数重载与代 ...
- (转)自动微分(Automatic Differentiation)简介——tensorflow核心原理
现代深度学习系统中(比如MXNet, TensorFlow等)都用到了一种技术——自动微分.在此之前,机器学习社区中很少发挥这个利器,一般都是用Backpropagation进行梯度求解,然后进行SG ...
随机推荐
- 【5】学习C++之类的概念
C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版.结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同:可以通过结构体来定义结构体变量,每个变量拥有相同的性 ...
- 题解:[GXOI/GZOI2019]与或和
开始完全没思路 在洛谷看到样例一,突发奇想,决定先做一下元素只有0/1的情况 发现子任务1是全1子矩阵 子任务2是总子矩阵个数减去全0子矩阵 发现全0/1矩阵可以构造单调栈解决.具体做法:前缀和求出每 ...
- [精品书单]word排版设计
- 「JavaScript面向对象编程指南」基础
DOM标准是独立的(即并不依赖JS)操作结构化文档的方式 BOM实际是个与浏览器有关的对象集合,原来没任何标准可言,H5诞生后才被定义了一些浏览器间通用的对象标准 ES5严格模式"use s ...
- 终于有人把P2P、P2C、O2O、B2C、B2B、C2C 的区别讲透了!
原文地址:https://www.cnblogs.com/sap-ronny/p/8149960.html P2P.P2C .O2O .B2C.B2B. C2C,每天看着这些常见又陌生的名词,如果有人 ...
- GitLab CI/CD 进行持续集成
简介 从 GitLab 8.0 开始,GitLab CI 就已经集成在 GitLab 中,我们只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 Runner,即可进行持续集成. ...
- oracle wallet使用与维护
oracle wallet使用与维护2015年05月26日 17:58:55 SilenceRiver 阅读数:1614oracle wallet使用与维护---oracle无密码登录分类: Orac ...
- Tensorflow笔记二
MNIST手写体识别 (Mixed National Institute of Standards and Technology database)的28*28字符识别共0-9类. 在ipython命 ...
- ProgressDialog替代
在API level 26 中,ProgressDialog被声明不赞成使用,应使用的替代方法是ProgressBar 利用下列代码实现ProgressBar的出现和消失 progressBar.se ...
- LoadRunner结果分析与生成报告
启动Analysis会话 1.打开HP LoadRunner2.打开LoadRunner Analysis在LoadRunner Analysis选项卡中单击分析负载测试3.打开Analysis会话文 ...