theano程序(一)

下面內容是此文章的練習,加了一些註釋和個人理解,不當之處請賜教:



#導入頭文件
import numpy as np
import matplotlib.pyplot as plt
import theano

import theano.tensor as T
from theano import pp



#symbolic variables 符號變量   編寫theano代碼更像寫數學公式

foo = T.scalar('foo')  #定義一個標量
bar = foo**2     #另一個變量
bar2 = foo**3
print type(bar)   #class 'theano.tensor.var.TensorVariable'

print bar.type   #TensorType(float64, scalar)

print pp(bar)  # pretty print funtion  ,bar的內容: (foo ** TensorConstant{3})

#爲了進行計算,需要定義符號函數
#funtion函數的第一個參數表示輸入,輸入部分必須用中括號[ ]括起,如果輸入參數爲空,則用[]表示
#第2個參數爲函數表達式,如果有多個表達式則也必須用中括號[ ]括起,若只有一個則可括可不括
#這裏定義了兩個函數
f1 = theano.function([foo],[bar])  
f2 = theano.function([foo],bar2)
print f1(3)

#替代函數的另一個方式:用符號變量的eval方法
#eval的參數是字典形式,用“鍵-值對”表示
print bar.eval({foo:3})

#python定義的函數也可以給theano的變量賦值
def square(x):
    return x**2
bar = square(foo)
print 'hi:'
print bar.eval({foo:3})
print square(2)


#theano中有向量、矩陣等類型,在這些類型上可能施加各種操作

A = T.matrix('A')
x = T.vector('x')
b = T.vector('b')
y = T.dot(A,x) + b  #與其他矩陣語言不同,NumPy中的乘法運算符*按元素逐個計算,矩陣乘法可以使用dot函數
z = T.sum(A**2)    #這裏先求A各元素平方,然後各列相加。
# theano.function函數可以同時做多個計算任務,如下所示同時計算y和z兩個表示式。下面第3個參數b設置了默認值
linear_mix = theano.function([A,x,theano.Param(b,default=np.array([0,0]))],[y,z])
#下面的參數分別對應A,x,b
print linear_mix(np.array([[1,2,3],[4,5,6]]),np.array([1,2,3]),np.array([4,5])) 

#下面只有兩個實參:A和x. 則第3個形參b使用默認的值 

print linear_mix(np.array([[1,2,3],[4,5,6]]),np.array([1,2,3]))


發佈了17 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章