【theano-windows】学习笔记一——theano中的变量
前言
因為目前需要搭建一些關于RBM或者其他之類的模型,感覺不太會折騰caffe,然而我發現了幾個有趣網址,使用theano實現了各種各樣的模型,所以,嘗試學一下theano。主要以官方教程為主,所以博客會以譯文的方式公布,當然會有自己的一些小見解或者擴展,編程環境為win7+jupyter notebook,如若有誤,謝謝指正
國際慣例,網址帖一波:
【PTVS+Theano+CPU/GPU】在windows下使用VS安裝theano深度學習工具
theano官方文檔
theano搭建各種模型,包含RBM,CNN,RNN,AE等
python基礎教程
theano中文翻譯
基本數據類型定義及操作
因為theano的變量定義模塊基本都存在theano.tensor中,所以我們先引入theano及其此模塊
import theano import theano.tensor as T標量定義和操作
首先定義theano類型的兩個標量,有兩種方法:
單獨為每一個標量定義
x=T.dscalar('x') y=T.dscalar('y')或者一次性定義多個
x,y=T.dscalars('x','y')然后定義兩個標量之間的操作,并將它轉換為theano可執行的函數
轉換方法是theano.function(),具體如下
z=x+y f=theano.function([x,y],z)可以發現function函數接受兩個輸入參數,第一個代表這個函數執行定義的功能所需要的輸入信息,第二個代表這個函數提供的輸出。這兩個參數都可以是一個值或者一個列表,f就相當于python中def定義的函數。
執行此函數看看,提供一個列表輸入,和一個值輸出
print f(1,2)#3.0可以發現theano的dscalar數據類型是double,只不過用type輸出來是float64
另一種不使用function的方法叫eval,但是沒function靈活,實現同樣的功能方法如下
print z.eval({x:2,y:3})#5.0它是將一個字典作為輸入變量,然后返回表達式數值結果。第一次使用eval()會很慢,因為后臺需要使用function()編譯表達式,但是后面相同的變量調用eval()就快了,因為編譯好的函數已經緩存了此變量
向量的定義和操作
兩種定義方法
#x,y=T.dvectors('x','y')x=T.dvector('x') y=T.dvector('y')賦值,運算
import numpy as np z=x+y f=theano.function([x,y],z) x1=np.array([1,2,3]) y1=np.array([4,5,6]) print f(x1,y1)#[ 5. 7. 9.]
矩陣的賦值和運算
兩種定義方法
# x=T.dmatrix('x')# y=T.dmatrix('y')x,y=T.dmatrices('x','y')賦值,運算
z=x+y f=theano.function([x,y],z) x2=np.array([[1,2,3],[4,5,6]]) y2=np.array([[1,4,7],[2,5,8]]) print f(x2,y2) ''' [[ 2. 6. 10.] [ 6. 10. 14.]] '''
其它數據類型和操作
數據類型
上面講的只有dscalar,’dvector’,’dmatrix’,但是theano還提供了許多其它精度的變量類型
byte: bscalar, bvector, bmatrix, brow, bcol, btensor3, btensor4, btensor5 16-bit integers: wscalar, wvector, wmatrix, wrow, wcol, wtensor3, wtensor4, wtensor5 32-bit integers: iscalar, ivector, imatrix, irow, icol, itensor3, itensor4, itensor5 64-bit integers: lscalar, lvector, lmatrix, lrow, lcol, ltensor3, ltensor4, ltensor5 float: fscalar, fvector, fmatrix, frow, fcol, ftensor3, ftensor4, ftensor5 double: dscalar, dvector, dmatrix, drow, dcol, dtensor3, dtensor4, dtensor5 complex: cscalar, cvector, cmatrix, crow, ccol, ctensor3, ctensor4, ctensor5其它與numpy兼容的類型可以查詢這里:tensor creation
變量操作
上面講的都是標量、向量、矩陣各自之間的操作,theano還支持標量+矩陣, 向量+矩陣, 標量+向量之類的操作,詳細查詢: broadcasting
隨便拿幾個作為實例看看:
dot函數,如果輸入是二維矩陣,那么就進行二維矩陣的乘法運算。如果輸入的是一維向量,就進行向量間的點乘計算(不包含共軛復數),例子:
import theano import theano.tensor as T import numpy as np#x,y=T.dvectors('x','y')x=T.dvector('x') y=T.dvector('y') z1=T.dot(x,y) f=theano.function([x,y],z1) x1=np.array([1,2,3]) y1=np.array([4,5,6]) print f(x1,y1)#32.0 #dot的向量乘積#x,y=T.dvectors('x','y')x=T.dmatrix('x') y=T.dmatrix('y') z1=T.dot(x,y) f=theano.function([x,y],z1) x2=np.array([[1,2,3],[4,5,6]]) y2=np.array([[1,4],[2,5],[7,8]]) print f(x2,y2) ''' [[ 26. 38.] [ 56. 89.]] '''outer函數,向量外積
#outer 向量外積#x,y=T.dvectors('x','y')x=T.dvector('x') y=T.dvector('y') z3=T.outer(x,y) f=theano.function([x,y],z3) x1=np.array([1,2,3]) y1=np.array([4,5,6]) print f(x1,y1) ''' [[ 4. 5. 6.] [ 8. 10. 12.] [ 12. 15. 18.]] '''向量+矩陣
x=T.dvector('x') y=T.dmatrix('y') z4=x+y f=theano.function([x,y],z4) x1=np.array([1,2,3]) y1=np.array([[4,5,6],[7,8,9]]) print f(x1,y1) ''' [[ 5. 7. 9.] [ 8. 10. 12.]] '''
官網介紹的剩下幾個函數回頭要用再慢慢補
練習
計算表達式a ** 2 + b ** 2 + 2 * a * b
標量形式
a,b=T.dscalars('a','b') c=a ** 2 + b ** 2 + 2 * a * b f=theano.function([a,b],c) print f(2,3)向量形式
a,b=T.dvectors('a','b') c=a ** 2 + b ** 2 + 2 * a * b f=theano.function([a,b],c) print f([1,2],[4,5]) #[ 25. 49.]所有code:鏈接: https://pan.baidu.com/s/1i4K5ULJ 密碼: 5i69
總結
以上是生活随笔為你收集整理的【theano-windows】学习笔记一——theano中的变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 光大苏宁SUPER联名信用卡额度多少?附
- 下一篇: 为什么信用卡按时还款却被降额?按时还款怎