图结构(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. 使用Bioconda管理生信软件(以bwa为例)
  2. 列表(list)、元组(tuple)、字典(dictionary)、array(数组)-numpy、DataFrame-pandas 、集合(set)...
  3. 利用who,w,ps和top等指令查看linux下的进程执行情况.,UNIXLINUX操作系统实验指导书...
  4. arthas使用示例:tt记录指定方法每次调用的入参和返回值
  5. 极限与连续知识点总结_考研数学一试卷全面分析,历年题型和知识点整理,送给2021的学子...
  6. 1.今日标签:视频价值一千字
  7. (干货!最全)Tomcat入门
  8. jquery attr
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的流浪宠物猫狗救助系统
  10. maven工具使用json-lib时,JSONArray.fromObject()不能执行的解决方案
  11. php163邮箱正则,正则表达式匹配邮箱账号
  12. 基于Vue的16个UI框架集锦
  13. 创建Allegro差分对
  14. 《创业时代》原型:为什么Talkbox、子弹短信都失败了?
  15. 八爪鱼爬取网页数据案例+图解
  16. 硬盘的结构和介绍,硬盘MBR详细介绍(超详细彩图)
  17. Word 远程调用失败:异常来自 HRESULT:0x800706BE
  18. case when 语句用法
  19. 云主机是什么,怎么才能购买性价比高的云主机
  20. java父类的称谓_《商周金文中的血缘关系称谓》

热门文章

  1. 通用AI——未来真正强健的人工智能?
  2. UC伯克利新机器人成果:灵活自由地使用工具
  3. 面对5G,华为、中兴及三大运营商怎么布局?
  4. 推荐!神经进化才是深度学习未来的发展之路!
  5. 任正非最新讲话透露:华为在加快开发统一的人工智能平台
  6. 世界各大天文台联合预警:今晚公布“引力波重要发现”
  7. 《程序员做饭指南》霸榜 GitHub!不仅有量筒、烧杯,还用上了数学公式?
  8. 实用!五款新型 Linux 命令行工具
  9. [Voice Tips 2] IPHONE
  10. 交换机运维需要注意哪些问题,让我们一起来闲聊下