Pytorch之Variable求导机制
自动求导机制是pytorch中非常重要的性质,免去了手动计算导数,为构建模型节省了时间。下面介绍自动求导机制的基本用法。
#自动求导机制
import torch
from torch.autograd import Variable# 1、简单的求导(求导对象是标量)
x = Variable(torch.Tensor([2]),requires_grad=True)
y = (x + 2) ** 2 + 3
print(y)
y.backward()
print(x.grad)#对矩阵求导
x1 = Variable(torch.randn(10,20),requires_grad=True)
y1 = Variable(torch.randn(10,1),requires_grad=True)
W = Variable(torch.randn(20,1),requires_grad=True)J = torch.mean(y1 - torch.matmul(x1,W)) #matmul表示做矩阵乘法
J.backward()
print(x1.grad)
print(y1.grad)
print(W.grad)
tensor([19.], grad_fn=<AddBackward0>)
tensor([8.])
tensor([[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454]])
tensor([[0.1000],
[0.1000],
[0.1000],
[0.1000],
[0.1000],
[0.1000],
[0.1000],
[0.1000],
[0.1000],
[0.1000]])
tensor([[ 0.0224],
[ 0.0187],
[-0.2078],
[ 0.5092],
[ 0.0677],
[ 0.3497],
[-0.4575],
[-0.5480],
[ 0.4228],
[-0.0869],
[ 0.2876],
[-0.1714],
[ 0.0985],
[-0.1364],
[-0.1502],
[-0.1372],
[-0.0999],
[-0.0006],
[-0.0544],
[-0.0678]])
#复杂情况的自动求导 多维数组自动求导机制
import torch
from torch.autograd import Variablex = Variable(torch.FloatTensor([3]),requires_grad=True)
y = x ** 2 + x * 2 + 3
y.backward(retain_graph=True) #保留计算图
print(x.grad)
y.backward()#不保留计算图
print(x.grad) #得到的是第一次求导的值加上第二次求导的值 8 + 8
tensor([8.])
tensor([16.])
#小练习,向量对向量求导
import torch
from torch.autograd import Variablex = Variable(torch.Tensor([2,3]),requires_grad = True)
k = Variable(torch.zeros_like(x))k[0] = x[0]**2 + 3 * x[1]
k[1] = 2*x[0] + x[1] ** 2print(k)
j = torch.zeros(2,2)
k.backward(torch.FloatTensor([1,0]),retain_graph = True)
j[0] = x.grad.datax.grad.zero_()
k.backward(torch.FloatTensor([0,1]),retain_graph = True)
j[1] = x.grad.data
print(j)
tensor([13., 13.], grad_fn=<CopySlices>)
tensor([[4., 3.],
[2., 6.]])
Pytorch之Variable求导机制的更多相关文章
- Pytorch Autograd (自动求导机制)
Pytorch Autograd (自动求导机制) Introduce Pytorch Autograd库 (自动求导机制) 是训练神经网络时,反向误差传播(BP)算法的核心. 本文通过logisti ...
- pytorch的自动求导机制 - 计算图的建立
一.计算图简介 在pytorch的官网上,可以看到一个简单的计算图示意图, 如下. import torchfrom torch.autograd import Variable x = Variab ...
- PyTorch官方中文文档:自动求导机制
自动求导机制 本说明将概述Autograd如何工作并记录操作.了解这些并不是绝对必要的,但我们建议您熟悉它,因为它将帮助您编写更高效,更简洁的程序,并可帮助您进行调试. 从后向中排除子图 每个变量都有 ...
- Pytorch学习(一)—— 自动求导机制
现在对 CNN 有了一定的了解,同时在 GitHub 上找了几个 examples 来学习,对网络的搭建有了笼统地认识,但是发现有好多基础 pytorch 的知识需要补习,所以慢慢从官网 API进行学 ...
- Pytorch中的自动求梯度机制和Variable类
自动求导机制是每一个深度学习框架中重要的性质,免去了手动计算导数,下面用代码介绍并举例说明Pytorch的自动求导机制. 首先介绍Variable,Variable是对Tensor的一个封装,操作和T ...
- 『PyTorch x TensorFlow』第六弹_从最小二乘法看自动求导
TensoFlow自动求导机制 『TensorFlow』第二弹_线性拟合&神经网络拟合_恰是故人归 下面做了三个简单尝试, 利用包含gradients.assign等tf函数直接构建图进行自动 ...
- Pytorch Tensor, Variable, 自动求导
2018.4.25,Facebook 推出了 PyTorch 0.4.0 版本,在该版本及之后的版本中,torch.autograd.Variable 和 torch.Tensor 同属一类.更确切地 ...
- 【小白学PyTorch】20 TF2的eager模式与求导
[新闻]:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测.医学图像.时间序列等多个目标为技术学习的分群和水群唠嗑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会.微信:cyx64501661 ...
- 什么是pytorch(2Autograd:自动求导)(翻译)
Autograd: 自动求导 pyTorch里神经网络能够训练就是靠autograd包.我们来看下这个包,然后我们使用它来训练我们的第一个神经网络. autograd 包提供了对张量的所有运算自动求导 ...
随机推荐
- 解决网卡无法自动获取ip的办法
解决网卡无法自动获取IP址的方法 为了省钱或者一户多机,很多人都购买宽带路由器共享上网.在架设路由上网的时候,有些“师傅”可能不懂或是偷懒,开启了宽带路由器的DHCP( Dynami ...
- December 22nd 2016 Week 52nd Thursday
The best hearts are always the bravest. 心灵最高尚的人,往往也是最勇敢的人. Keep conscience clear, don't let too many ...
- Debian下Cannot set LC_CTYPE to default locale: No such file or directory解决方法
把语言环境变量改为英文 将Ubuntu系统语言环境改为英文的en_US.UTF-8 查看当前系统语言环境 locale 编辑配置文件,将zh_US.UTF-8改为en_US.UTF-8,zh改为en ...
- 随手练——洛谷-P1008 / P1618 三连击(暴力搜索)
1.普通版 第一眼看到这个题,我脑海里就是,“我们是不是在哪里见过~”,去年大一刚学C语言的时候写过一个类似的题目,写了九重循环....就像这样(在洛谷题解里看到一位兄台写的....超长警告,慎重点开 ...
- font-failmly字体对应
- 用JavaScript中lodash编写双色球
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mpvue微信小程序开发随笔
mpvue上手很快,学习成本低,目前是开源的,适合技术实力不是很强的公司采用. spring boot 做后台,开发效率杠杠的.建议会java的开发尽量使用spring boot 开发,省事. 最近用 ...
- ES6读书笔记(一)
前言 前段时间整理了ES5的读书笔记:<你可能遗漏的JS知识点(一)>.<你可能遗漏的JS知识点(二)>,现在轮到ES6了,总共分为四篇,以便于知识点的梳理和查看,本篇内容包括 ...
- Oracle startup的四个阶段
shutdown->nomount->mount->open: 1.shutdown:数据库关闭 2.nomount: 1)$ORACLE_HOME/dbs下找初始化参数文件 a.s ...
- let与var的区别,为什么什么要用let?
1.var是全局声明,let是块级作用的,只适用于当前代码块 var a = 1: if(true){ let a; a=22: console.log(a);'//22 } if(){}内就是let ...