当前位置: 首页 > news >正文

Theano - 导数

计算梯度

计算x^2的梯度

import numpy
import theano
import theano.tensor as T
from theano import pp
x = T.dscalar('x')
y = x ** 2
gy = T.grad(y, x)
pp(gy)
f = theano.function([x], gy)
pp(f.maker.fgraph.outputs[0])
f(4)
numpy.allclose(f(94.2), 188.4)

计算逻辑函数的梯度

x = T.dmatrix('x')
s = T.sum(1 / (1 + T.exp(-x)))
gs = T.grad(s, x)
dlogistic = theano.function([x], gs)
dlogistic([[0, 1], [-1, -2]])

计算Jacobian

x = T.dvector('x')
y = x ** 2
J, updates = theano.scan(lambda i, y, x: T.grad(y[i], x), sequences=T.arange(y.shape[0]), non_sequences=[y,x])
f = theano.function([x], J, updates=updates)
f([4, 4])

计算Hessian矩阵

x = T.dvector('x')
y = x ** 2
cost = y.sum()
gy = T.grad(cost, x)
H, updates = theano.scan(lambda i, gy, x: T.grad(gy[i], x), sequences=T.arange(gy.shape[0]), non_sequences=[gy,x])
f = theano.function([x], H, updates=updates)
f([4,4])

Jacobian times a Vector

右算子(R-operator)

W = T.dmatrix('W')
V = T.dmatrix('V')
x = T.dvector('x')
y = T.dot(x, W)
JV = T.Rop(y, W, V)
f = theano.function([W, V, x], JV)
f([[1,1], [1,1]], [[2,2], [2,2]], [0,1])

左算子(L-operator)

W = T.dmatrix('W')
v = T.dvector('v')
x = T.dvector('x')
y = T.dot(x, W)
VJ = T.Lop(y, W, v)
f = theano.function([v, x], VJ)
f([2,2], [0,1])

Hessian times a Vector

x = T.dvector('x')
v = T.dvector('v')
y = T.sum(x ** 2)
gy = T.grad(y, x)
vH = T.grad(T.sum(gy * v), x)
f = theano.function([x,v], vH)
f([4,4], [2,2])

右算子

x = T.dvector('x')
v = T.dvector('v')
y = T.sum(x ** 2)
gy = T.grad(y, x)
Hv = T.Rop(gy, x, v)
f = theano.function([x,v], Hv)
f([4,4], [2,2])

相关文章:

  • Windows系统查看并清理缓存
  • 数据结构
  • 本地运行Tachyon(译)
  • springboot(十四):springboot整合shiro-登录认证和权限管理
  • 是反反复复
  • 使用Keil MDK以及标准外设库创建STM32工程
  • Genymotion 插件在 Eclipse 和 Android Studio 中点击后无法初始化 Initialize Engine: failed 解决方法...
  • SQL --max使用
  • 11款开放中文分词引擎大比拼
  • 程序员入行须知
  • Material Design
  • c++ Map使用
  • 打造终端下mutt收发邮件环境(fbterm,fetchmail,msmtp,procmail,mutt)
  • hosts文件位置
  • jvm调优——eclipse示例
  • JS 中的深拷贝与浅拷贝
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Angular6错误 Service: No provider for Renderer2
  • echarts花样作死的坑
  • emacs初体验
  • gcc介绍及安装
  • JavaScript学习总结——原型
  • Mybatis初体验
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • 阿里云应用高可用服务公测发布
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 删除表内多余的重复数据
  • 跳前端坑前,先看看这个!!
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 一个项目push到多个远程Git仓库
  • 硬币翻转问题,区间操作
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • C# - 为值类型重定义相等性
  • Hibernate主键生成策略及选择
  • 国内开源镜像站点
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (待修改)PyG安装步骤
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (四)模仿学习-完成后台管理页面查询
  • ../depcomp: line 571: exec: g++: not found
  • .bat文件调用java类的main方法
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET中的十进制浮点类型,徐汇区网站设计
  • ;号自动换行
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [《百万宝贝》观后]To be or not to be?
  • [android] 手机卫士黑名单功能(ListView优化)
  • [AR Foundation] 人脸检测的流程