图结构(Graph Structures)这是理解Theano该基金会的内部运作。

Theano编程的核心是用符号占位符把数学关系表示出来。

图结构的组成部分

如图实现了这段代码:

importtheano.tensor as T
x= T.matrix('x')
y= T.matrix('y')
z= x + y

变量节点(variable nodes)

红色表示。

变量节点都有owner。当中x与y的owner为none。

z的owner为apply。

操作节点(op nodes)

绿色表示。表示各个变量之间的运算(比如+, -, **, sum(),tanh()等等)。

应用节点(apply nodes)

蓝色表示。

其它节点都连在上面。

分析nodes相应属性

对于下面代码。分析其节点属性。

importtheano.tensor as T
x= T.dmatrix('x')
y= x * 2.
>>>y.owner.op.name
'Elemwise{mul,no_inplace}'#y的owner是apply而apply的op是'Elemwise{mul,no_inplace}'
>>>len(y.owner.inputs)
2#两个输入
>>>y.owner.inputs[0]
x#第一个输入是x矩阵
>>>y.owner.inputs[1]
InplaceDimShuffle{x,x}.0

#注意这里第二个输入并非2。而是和x相同大小的矩阵框架,由于等会要广播才干相乘

>>>type(y.owner.inputs[1])
<class'theano.tensor.basic.TensorVariable'>
>>>type(y.owner.inputs[1].owner)
<class'theano.gof.graph.Apply'>
>>>y.owner.inputs[1].owner.op
<class'theano.tensor.elemwise.DimShuffle object at 0x14675f0'>#用DimShuffle把2广播出来
>>>y.owner.inputs[1].owner.inputs
[2.0]#矩阵框架的owner才是2

自己主动优化

编译Theano事实上是编译了一张图。这张图从输入变量開始贯穿全图直到输出变量。

Theano能够检測关键子图。来进行替换,防止反复,以达到优化的目的。比方用x替换xy/y。

举个样例

>>>import theano
>>>a = theano.tensor.vector("a")     # declare symbolic variable
>>>b = a + a ** 10                    #build symbolic expression
>>>f = theano.function([a], b)        #compile function
>>>print f([0, 1, 2])                 #prints `array([0,2,1026])`
优化前
优化后

欢迎參与讨论并关注本博客和微博以及知乎个人主页兴许内容继续更新哦~

转载请您尊重作者的劳动,完整保留上述文字以及文章链接。感谢您的支持!

Theano学习笔记(三)——图结构相关推荐

  1. 深度学习(三)theano学习笔记(2)基础函数-未完待续

    theano学习笔记(2)基础函数 1.随机函数库的调用 2.卷积神经网络 [python] view plaincopy #-*-coding:utf-8-*- import theano impo ...

  2. 深度学习(二)theano学习笔记(1)环境搭建

    theano学习笔记(1)环境搭建 原文地址:http://blog.csdn.net/hjimce/article/details/46654229 作者:hjimce 搭建theano实属不易,因 ...

  3. 投资信托学习笔记(三)

    投资信托学习笔记(三) 投资信托学习笔记(三) - 补充笔记 百度百科信托投资 https://baike.baidu.com/item/%E4%BF%A1%E6%89%98%E6%8A%95%E8% ...

  4. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  5. 吴恩达《机器学习》学习笔记三——多变量线性回归

    吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...

  6. pyecharts查看版本_pyecharts v1 版本 学习笔记 折线图,面积图

    折线图 折线图 基本demo import pyecharts.options as opts from pyecharts.charts import Line c = ( Line() .add_ ...

  7. Mr.J-- jQuery学习笔记(三十二)--jQuery属性操作源码封装

    扫码看专栏 jQuery的优点 jquery是JavaScript库,能够极大地简化JavaScript编程,能够更方便的处理DOM操作和进行Ajax交互 1.轻量级 JQuery非常轻巧 2.强大的 ...

  8. ROS学习笔记三:创建ROS软件包

    ,# ROS学习笔记三:创建ROS软件包 catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 这个软件包必须包含一个catkin编译文件package.xml(man ...

  9. Python学习笔记三之编程练习:循环、迭代器与函数

    Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...

  10. python3常用模块_Python学习笔记三(常用模块)

    Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...

最新文章

  1. C# 数据库连接笔记
  2. android开发--详解ListView,动态添加,删除Adapter中的数据项
  3. 《MyBatis技术原理与实战》之动态SQL
  4. Python 循环列表删除元素的注意事项
  5. boost::hana::sfinae用法的测试程序
  6. Java高级工程师实战经验图谱
  7. 911计算机专业基础综合,青岛大学10数据结构911计算机专业综合
  8. mysql分组统计查询 张三_MySQL 怎样分组查询
  9. 什么时候用到全排列_初学讲义之高中数学二十一:排列组合和二项式定理
  10. JavaScript垃圾收集-标记清除和引用计数
  11. Eclipse ADT Bundle 整合包下载地址(百度网盘)
  12. 新益华基层医疗系统使用方法_MongoDB for VS Code:使用Mongo的新方法
  13. 蒙特卡洛算法与电脑围棋
  14. 微信小微商户申请入驻接口PHP示例
  15. 金之塔用 Python 获取日内分时均价,每分钟日成交量和每时刻结算价,及交叉作用曲线延伸
  16. Dell R730xd 安装显卡后风扇转速高 解决方法
  17. saas php7框架开源,HRM SAAS v2.5.7 – PHP人力资源管理系统SaaS平台版
  18. 局部刷新的两种实现方式
  19. SQLIntegrityConstraintViolationException: ORA-00001: unique constraint及sequence调整初始值
  20. 谷歌浏览器的小恐龙游戏

热门文章

  1. 67 亿美金搞个图,创建知识图谱的成本有多高你知道吗?
  2. 如何体现机器智能和群体智能的关系,2018新版互联网大脑模型绘制
  3. 5G 除了上网快,还有什么用?
  4. 有哪些事情是你成为程序员之后才知道的?
  5. 作业——08 爬虫综合大作业
  6. springboot + shiro 验证码与记住登录
  7. 学习 jQuery UI
  8. 华山论剑之iOStableView的双剑合璧
  9. SQL Server-聚焦sp_executesql执行动态SQL查询性能真的比exec好?
  10. markdown错误和问题