theano程式設計的核心是用符號佔位把數學關係表示出來。
import theano.tensor as t
x = t.dmatrix('x')
y = x*2.
>>> y.owner.op.name
'elemwise'
>>> y.owner.inputs
[x, dimshuffle.0]
# 返回 list
>>> y.owner.inputs[0]
x>>> y.owner.inputs[1]
dimshuffle.0
編譯theano其實是編譯了一張圖。
a = t.vector('a') # declare symbolic variable
b = a + a**10
# build symbolic expression
f = theano.function([a], b)
# compile function
print(f([0, 1, 2]))
圖結構中在編譯之前要求參與運算的資料結構都需宣告各個維度是否可broadcastable。numpy使用的是執行時的shape資訊(不需宣告,自動broadcast?)。
x = t.matrix('x') # the data is presented as rasterized images
y = t.ivector('y') # the labels are presented as 1d vector of [int] labels
# reshape matrix of rasterized images of shape
# (batch_size, 28*28) to a 4d tensor, 使其與lenetconvpoollayer相相容
layer0_input = x
.reshape((batch_size, 1, 28, 28))
>>> x
.reshape((500, 3, 28, 28))
tensortype(float64, 4d)
>>> x.type
tensortype(float64, matrix)
>>> layer0_input.type
tensortype(float64, (false, true, false, false))
# 布林值表示是否可被broadcast
>>> x.reshape((500, 3, 28, 28)).type
tensortype(float64, 4d)
>>> t.dtensor4().type
tensortype(float64, 4d)
# train_set_x: theano.shared()型別
train_set_x.get_value(borrow=true)
# 返回的正是ndarray型別,borrow=true表示返回的是「引用」
train_set_x.get_value(borrow=true).shape[0]
查閱theano完備的文件,我們知:
theano所內建的資料型別主要位於theano.tensor
子模組下,
import theano.tensor as t
這裡的tensor3/4
型別也不神秘,
注意以上這些型別的型別都是theano.tensor.var.tensorvariable
>>> x = t.iscalar('x')
>>> type(x)
theano.tensor
.var
.tensorvariable
>>> x
.type
tensortype(int32, scalar)
我們繼續考察tensor
:
>>> x = t.dmatrix()
>>> x.type
>>> x = t.matrix()
>>> x.type
在設計經典的卷積神經網路(cnn)時,在輸入層和第乙個隱層之間需要加乙個卷積的動作,對應的api是theano.tensor.signal.conv.conv2d
,其主要接受兩個符號型輸入symbolic inputs
:
rng = np.random.randomstate(23455)
input = t.dtensor4('input')
w_shp = (2, 3, 9, 9)
# 3 means: rgb, 影象的三種顏色分量
w_bound = np.sqrt(np.prod(w_shp[1:]))
w = theano.shared(np.asarray(rng.uniform(low=-1./w_bound, high=1./w_bound, size=w_shp), dtype=input.dtype), name='w')
conv_out = conv.conv2d(input, w)
內建資料型別
內建 顧名思義,指內部設定,如內建型別 內建api 內建類 內建方法 等 內建資料型別 顧名思義,指內部設定的資料型別,就是某種語言內部自己定義的一些東西的型別,如 基本資料型別 引用型別 變數型別 等 性質 1 內部設定,內部定義 2 型別,分類 外接型別 與內建型別相反的是外接型別,指內外設定的...
python學習之內置資料型別
pyhton 內建資料型別 booleans 布林型 值為真 true 或者假 flase numbers 數值型 integers 整數 floats 浮點數 fractions 分數 complex number 複數 string 字串型別 是unicode編碼 bytes 位元組 和byte...
Hive內建資料型別
hive的內建資料型別可以分為兩大類 1 基礎資料型別 2 複雜資料型別。其中,基礎資料型別包括 tinyint,smallint,int,bigint,boolean,float,double,string,binary,timestamp,decimal,char,varchar,date。下面...