![]() | |
原作者 | 蒙特婁大學的蒙特婁學習算法研究所(英語:Montreal Institute for Learning Algorithms)(MILA) |
---|---|
開發者 | PyMC開發團隊 |
首次發布 | 2007年,18年前(2007) |
當前版本 |
![]() |
原始碼庫 | ![]() |
程式語言 | Python,CUDA |
平台 | Linux,macOS,Windows |
類型 | 機器學習,函式庫 |
許可協議 | 3條款BSD許可證 |
網站 | pytensor![]() |
Theano及其分叉PyTensor,是一個Python庫和優化的編譯器,用來操縱和求值數學表達式特別是矩陣值表達式[2]。在其中,計算使用NumPy風格的語法來表達並被編譯,用來在CPU或者GPU架構上高效的運行。
Theano是開源項目[3],主要由蒙特婁大學的蒙特婁學習算法研究所(英語:Montreal Institute for Learning Algorithms)(MILA)開發[4]。軟體名字取自古代哲學家Theano(英語:Theano (philosopher))。在2017年9月28日,Pascal Lamblin發布了來自約書亞·本希奧的一則信息,MILA負責人說:由於更強大的工業參與者的競爭,主要的開發在1.0發行之後將會停止[5]。Theano 1.0.0隨後在2017年11月15日發行[6]。
在2018年5月17日,Chris Fonnesbeck代表PyMC開發團隊寫道:PyMC開發者將在他們退場後取得對Theano維護的控制權[7]。在2021年1月絕大部份的Theano代碼基被重新建造,並增加了通過JAX和Numba的編譯,修訂後的這個計算後端以新名字Aesara發行。2022年11月28日,PyMC團隊宣布採用從Aesara計劃分叉出PyTensor[8]。
下列代碼以PyTensor用作介紹的例子:
importpytensorfrompytensorimporttensoraspt# 声明2个符号浮点标量a=pt.dscalar("a")b=pt.dscalar("b")# 建立一个简单的表达式c=a+b# 将这个表达式转换成一个可调用对象,# 它接收'(a, b)'值作为输入并计算出一个值给'c'f_c=pytensor.function([a,b],c)assertf_c(1.5,2.5)==4.0# 计算样例表达式关于'a'的梯度dc=pytensor.grad(c,a)f_dc=pytensor.function([a,b],dc)assertf_dc(1.5,2.5)==1.0
>>>importpytensor>>>frompytensorimporttensoraspt>>>>>># 通过'pytensor.function'编译函数还能优化表达式图>>># 它会移除不必要的运算并将特定运算替代为更有效的运算>>>>>>v=pt.vector("v")>>>M=pt.matrix("M")>>>>>>d=a/a+(M+a).dot(v)>>>>>>pytensor.dprint(d)Add [id A] ├─ ExpandDims{axis=0} [id B] │ └─ True_div [id C] │ ├─ a [id D] │ └─ a [id D] └─ dot [id E] ├─ Add [id F] │ ├─ M [id G] │ └─ ExpandDims{axes=[0, 1]} [id H] │ └─ a [id D] └─ v [id I]<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>>>>>>>f_d=pytensor.function([a,v,M],d)>>>>>># 'a/a' -> '1'而点积被替代为BLAS函数(i.e. CGemv)>>>pytensor.dprint(f_d)Add [id A] 5 ├─ [1.] [id B] └─ CGemv{inplace} [id C] 4 ├─ AllocEmpty{dtype='float64'} [id D] 3 │ └─ Shape_i{0} [id E] 2 │ └─ M [id F] ├─ 1.0 [id G] ├─ Add [id H] 1 │ ├─ M [id F] │ └─ ExpandDims{axes=[0, 1]} [id I] 0 │ └─ a [id J] ├─ v [id K] └─ 0.0 [id L]<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>