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


    图结构(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])`

    优化前






    优化后

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

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


  • 相关阅读:
    学习笔记—查找
    水晶报表图表制作问题
    Chrome对最小字体的限制
    Devexpress的ASPxDateEdit控件设置其‘today’ 为客户端当前日期
    水晶报表多表数据源
    System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded
    利用水晶报表制作甘特图
    水晶报表打印时最后多打印一空白页
    day3学习
    Python高级自动化培训day1
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5033912.html
Copyright © 2020-2023  润新知