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

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

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

 

图结构的组成部分

如图实现了这段代码:

[python]  view plain  copy
  1. importtheano.tensor as T  
  2. x= T.matrix('x')  
  3. y= T.matrix('y')  
  4. z= x + y  


变量节点(variable nodes)

红色表示。变量节点都有owner,其中x与y的owner为none。z的owner为apply。

 

操作节点(op nodes)

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

 

应用节点(apply nodes)

蓝色表示。其他节点都连在上面。

 

 

分析nodes对应属性

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

[python]  view plain  copy
  1. importtheano.tensor as T  
  2. x= T.dmatrix('x')  
  3. y= x * 2.  
  4. >>>y.owner.op.name  
  5. 'Elemwise{mul,no_inplace}'#y的owner是apply而apply的op是'Elemwise{mul,no_inplace}'  
  6. >>>len(y.owner.inputs)  
  7. 2#两个输入  
  8. >>>y.owner.inputs[0]  
  9. x#第一个输入是x矩阵  
  10. >>>y.owner.inputs[1]  
  11. InplaceDimShuffle{x,x}.0  
#注意这里第二个输入并不是2,而是和x同样大小的矩阵框架,因为等会要广播才能相乘

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


自动优化

编译Theano其实是编译了一张图。这张图从输入变量开始贯穿全图直到输出变量。Theano可以检测关键子图,来进行替换,防止重复,以达到优化的目的。比如用x替换xy/y。

举个例子

[python]  view plain  copy
  1. >>>import theano  
  2. >>>a = theano.tensor.vector("a")     # declare symbolic variable  
  3. >>>b = a + a ** 10                    #build symbolic expression  
  4. >>>f = theano.function([a], b)        #compile function  
  5. >>>print f([012])                 #prints `array([0,2,1026])`  

优化前






优化后
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值