计算梯度

现在让我们使用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]])

一般来说,对于任何标量表达式sT.grad(s, w)提供Theano表达式用于计算。这样,Theano可用于对符号进行高效的微分(由于T.grad返回的表达式将在编译期间优化),即使对于具有多个输入的函数也是如此。

注意:

T.grad的第二个参数可以是一个列表,在这种情况下,输出也是一个列表。两个列表中的顺序很重要:输出列表的元素iT.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的性能。

最新文章

  1. C#编程模式之扩展命令
  2. VS 工程的 输出路径和工作路径的区别
  3. 使用hexo+github搭建免费个人博客详细教程
  4. ubuntu add application to launcher
  5. Update UI from an asynchronous thread
  6. 匿名函数和Lamda
  7. SIMATIC IT HISTORIAN在烟用二醋酸纤维素生产中应用
  8. 单源最短路径的Bellman-Ford 算法
  9. C# 两个ListBox 数据互传-基础操作
  10. The Managed Metadata Service or Connection is currently not available
  11. Linux系统文本命令快速登录与退出
  12. 【剑指offer】面试题38:数字在排序数组中出现的次数
  13. 基于PCA和SVM的人脸识别系统-error修改
  14. C# winfrom中Flash播放使用axShockwaveFlash控件设置透明XP出现白色背景解决办法,仿QQ魔法表情效果
  15. 随应潮流-基于ABP+Angulsrjs现代化应用软件开发框架(2)-abp说明
  16. Java 通过先序后序序列生成二叉树
  17. Docker资源网站收藏
  18. android 向webview传值
  19. 代理网络中安装tomcat的注意事项
  20. [置顶]生鲜配送管理系统_升鲜宝V2.0 销售订单汇总_采购任务分配功能_操作说明

热门文章

  1. 原版_打字游戏.html
  2. 按钮组件.html
  3. SpringCloud之整合Zipkin+Sleuth(十四)
  4. Spring Cloud Eureka源码分析---服务注册
  5. vue H5页面手机端 利用canvas 签名
  6. CentOS 7升级Python到3.6.6后yum出错问题解决总结
  7. NOIP模拟测试25
  8. 使用webpack+babel构建ES6语法运行环境
  9. 考试T3麻将
  10. 『题解』洛谷P1993 小K的农场