码迷,mamicode.com
首页 > 其他好文 > 详细

Theano学习笔记(三)——图结构

时间:2014-08-29 11:04:07      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:theano   python   深度学习   deep learning   图结构   

图结构(Graph Structures)是了解Theano内在工作原理的基础。

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

 

图结构的组成部分

如图实现了这段代码:

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

bubuko.com,布布扣


变量节点(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])`

bubuko.com,布布扣
优化前





bubuko.com,布布扣
优化后

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

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


Theano学习笔记(三)——图结构

标签:theano   python   深度学习   deep learning   图结构   

原文地址:http://blog.csdn.net/ycheng_sjtu/article/details/38920473

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!