Theano中的导数
计算梯度
现在让我们使用Theano来完成一个稍微复杂的任务:创建一个函数,该函数计算相对于其参数x的某个表达式y的导数。为此,我们将使用宏T.grad
。例如,我们可以计算相对于的梯度
import theano
import numpy as np
import theano.tensor as T
from theano import pp
x=T.dscalar('x')
y=x**2
gy=T.grad(y,x)
print pp(gy)#输出优化前的梯度
f=theano.function([x],gy)
print f(4)
((fill((x ** TensorConstant{2}), TensorConstant{1.0}) * TensorConstant{2}) * (x ** (TensorConstant{2} - TensorConstant{1})))
8.0
In this example, we can see from pp(gy)
that we are computing the correct symbolic gradient. fill((x ** 2), 1.0)
means to make a matrix of the same shape as x ** 2 and fill it with 1.0.
注意:
优化器简化了符号梯度表达式。你可以通过挖掘编译后的函数的内部属性来看到这一点。
print pp(f.maker.fgraph.outputs[0]) (TensorConstant{2.0} * x)
优化后,图中只剩下一个Apply节点,其使输入加倍。
我们还可以计算复杂表达式的梯度,例如上面定义的logistic函数。
x=T.dmatrix('x')
s=T.sum(1/(1+T.exp(-x)))
gs=T.grad(s,x)
dlogistic=theano.function([x],gs)
print dlogistic([[0,1],[-1,-2]])
一般来说,对于任何标量表达式s,T.grad(s, w)
提供Theano表达式用于计算。这样,Theano可用于对符号进行高效的微分(由于T.grad
返回的表达式将在编译期间优化),即使对于具有多个输入的函数也是如此。
注意:
T.grad的第二个参数可以是一个列表,在这种情况下,输出也是一个列表。两个列表中的顺序很重要:输出列表的元素i是T.grad
第一个参数相对于第二个参数列表中的第i元素的梯度。T.grad
的第一个参数必须是标量(大小为1的张量)。
计算Jacobian
在Theano的用语中,术语Jacobian表示函数相对于其输入的一阶偏导数的张量。(这是对数学中所谓的Jacobian矩阵的泛化。)Theano实现theano.gradient.jacobian宏,执行计算Jacobian所需的所有内容。以下内容说明如何手动执行。
为了手动计算某些函数y相对于某个参数x的雅可比矩阵(Jacobian),我们需要使用scan
。我们所做的是循环y中的条目,并计算y[i]相对于x的梯度。
注意:
scan
是Theano中的通用操作,允许以符号方式写入各种循环方程。创建符号循环(并优化它们的性能)是一项艰巨的任务,人们正在努力提高scan
的性能。
Theano中的导数的更多相关文章
- theano中的scan用法
scan函数是theano中的循环函数,相当于for loop.在读别人的代码时第一次看到,有点迷糊,不知道输入.输出怎么定义,网上也很少有example,大多数都是相互转载同一篇.所以,还是要看官方 ...
- theano中的dimshuffle
theano中的dimshuffle函数用于对张量的维度进行操作,可以增加维度,也可以交换维度,删除维度. 注意的是只有shared才能调用dimshuffle() 'x'表示增加一维,从0d sca ...
- Theano入门笔记1:Theano中的Graph Structure
译自:http://deeplearning.net/software/theano/extending/graphstructures.html#graphstructures 理解Theano计算 ...
- Theano2.1.21-基础知识之theano中多核的支持
来自:http://deeplearning.net/software/theano/tutorial/multi_cores.html Multi cores support in Theano 一 ...
- theano中对图像进行convolution 运算
(1) 定义计算过程中需要的symbolic expression """ 定义相关的symbolic experssion """ # c ...
- theano中的concolutional_mlp.py学习
(1) evaluate _lenet5中的导入数据部分 # 导入数据集,该函数定义在logistic_sgd中,返回的是一个list datasets = load_data(dataset) # ...
- theano中的logisticregression代码学习
1 class LogisticRegression (object): 2 def __int__(self,...): 3 4 #定义一些与逻辑回归相关的各种函数 5 6 def method1( ...
- theano中tensor的构造方法
import theano.tensor as T x = T.scalar('myvar') myvar = 256 print type(x),x,myvar 运行结果: <class 't ...
- Theano2.1.6-基础知识之在thenao中的求导
来自:http://deeplearning.net/software/theano/tutorial/gradients.html Derivatives in Theano 一.计算梯度 现在,让 ...
随机推荐
- DirectX9:第一章 初始化Direct3D
一.Direct3D概述 Direct3D是一套底层图形API,可以被视为应用程序与图形设备交互的中介. 应用程序.Direct3D以及硬件之间的交互关系: 在Direct3D和图形设备之间有一个环节 ...
- SVM详细笔记及总结
本文精品,如有疑问欢迎留言or微信咨询:523331232
- 《大数据实时计算引擎 Flink 实战与性能优化》新专栏
基于 Flink 1.9 讲解的专栏,涉及入门.概念.原理.实战.性能调优.系统案例的讲解. 专栏介绍 扫码下面专栏二维码可以订阅该专栏 首发地址:http://www.54tianzhisheng. ...
- mui iOS云打包修改权限提示语
打包提交appstore如果用到了如下权限需要修改提示语,详细描述使用这个权限的原因,如不修改提示语appstore审核可能会被拒绝 设置方法如下: 使用视图方式打开manifest.json文件, ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理七(二十五)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- maven项目部署到tomcat方法
今天记录下,maven项目部署到服务器的过程 1.首先在ide中里将自己的maven项目打包 mvn clean install 2. 看是否需要修改war包的名字,如果要修改,就用命令 mv xxx ...
- 使用VM虚拟机安装Linux系统详细流程
最近新换了个电脑,所以需要重新安装虚拟机和Linux系统,话不多说,看流程吧 1.安装vm,这个就不说了,打开VM 2.点击安装虚拟机 3.选择自定义安装 4.选择稍后安装 5.选择要安装的系统 6. ...
- 「刷题」Triple
正解是普通型母函数+FFT. 才学了多项式,做了一道比较好的题了. 首先有三个斧子被偷了. 我们考虑构造一种普通型母函数. 就是说一种多项式吧,我的理解. 系数是方案,下标,也就是所谓的元指数代表的是 ...
- python_day3(文件处理)
1.文件处理 #Author:Elson Zeng #data = open("test").read() # f = open("test",'a',enco ...
- php nginx反向代理获取真实ip的教程
php nginx反向代理获取真实ip的教程 <pre> location /getip { proxy_pass http://newmiracle.cn/ip.php; } proxy ...