Theano學習筆記(三)――圖結構
來源:程序員人生 發(fā)布時間:2014-10-12 23:31:40 閱讀次數(shù):2263次
圖結構(Graph Structures)是了解Theano內(nèi)在工作原理的基礎。
Theano編程的核心是用符號占位符把數(shù)學關系表示出來。
圖結構的組成部分
如圖實現(xiàn)了這段代碼:
importtheano.tensor as T
x= T.matrix('x')
y= T.matrix('y')
z= x + y
變量節(jié)點(variable nodes)
紅色表示。變量節(jié)點都有owner,其中x與y的owner為none。z的owner為apply。
操作節(jié)點(op nodes)
綠色表示。表示各個變量之間的運算(例如+, -, **, sum(),tanh()等等)。
應用節(jié)點(apply nodes)
藍色表示。其他節(jié)點都連在上面。
分析nodes對應屬性
對于以下代碼,分析其節(jié)點屬性。
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
自動優(yōu)化
編譯Theano其實是編譯了一張圖。這張圖從輸入變量開始貫穿全圖直到輸出變量。Theano可以檢測關鍵子圖,來進行替換,防止重復,以達到優(yōu)化的目的。比如用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])`
優(yōu)化前
優(yōu)化后
歡迎參與討論并關注本博客和微博以及知乎個人主頁后續(xù)內(nèi)容繼續(xù)更新哦~
轉載請您尊重作者的勞動,完整保留上述文字以及文章鏈接,謝謝您的支持!
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈