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 ...
随机推荐
- mysql并发控制之数据库锁
1.mysql和redis的区别 mysql是一种关系型数据库,数据会最终存储在磁盘上.而redis是一种非关系型的nosql数据库,以key-value的形式存储数据,将数据存储在内存.从性能上来说 ...
- javaFX的控制台实现
最近做了个javaFX的工具,想弄个控制台输出信息,准备用TextArea来模拟console,但直接操纵console对象的话不依赖这个项目的地方就无法输出信息到控制台了,至于log,以前弄过一个输 ...
- OSL
1,SimpleColorShader: shader gamma(color cin = color(,,),output color Cout=color(,,)) { Cout = cin; } ...
- python中的MySQL使用 + pickle使用
(1)python中有一个包“sqlite3”,可以用来进行数据库相关的操作: 参考下面一个例子: import sqlite3 import pickle img_list = [('a' , 0) ...
- eclipse,代码中有错误,项目或者java类中却不显示红叉
修改eclipse代码提示级别1.单个项目修改项目上右键-->properties-->java compiler-->building-->enable project sp ...
- rsync拉取服务器上的代码到本地
#!/bin/sh ];then echo "The parameters must be input:file path and host" read -p "(Exa ...
- 题解 P5315 【头像上传】
本题就是按照题目模拟, 只是要注意一些细节问题. 看代码注释 #include<bits/stdc++.h> using namespace std; int n,l,g,i; int m ...
- mongodb导出数据到csv
mongo cws export.js > out.csv export.js // Date.prototype.getIOSDate = function () { return new D ...
- Xpath Helper的使用
xPath Helper插件 xPath helper是一款Chrome浏览器的开发者插件,安装了xPath helper后就能轻松获取HTML元素的xPath,程序员就再也不需要通过搜索html源代 ...
- 安卓获取签名SHA1
Debug签名:D:\Java\jdk1.8.0_151\bin>keytool -list -v -keystore debug.keystore 无需密码 Relese签名:D:\Java ...