在下载了Theano源码之后,我们同时以开发模式安装了Theano。下面我们来尝试使用Numpy和Theano作一些简单的线性代数运算,熟悉一下这两库的基本使用方法,为下面的神经网络算法学习打好基础。
-
- import numpy
- from theano import *
- import theano.tensor as T
-
- mtx = numpy.asarray([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
- scale = 2.0
- newMtx = scale * mtx
-
- print("二维数组乘以常数: %f, %f" % (newMtx[0, 0], newMtx[2, 0]))
在引入了我们所需要的类之后,我们首先声明了一个矩阵,这里是一个3*2的二维数组mtx,接着我们将一个常数乘以矩阵mtx,得到新的矩阵newMtx,最后我们打印出第一行第一列和第三行第一列的值。
从上面这个简单的例子,我们可以看到,Theano和Numpy的使用还是非常简单的。
下面来看两个矩阵的加法。其实从本质上来说,向量是一维数组,矩阵在是二维数组,张量是三维数组,而我们所熟悉的常数,即标量,实际上是零维数组。所以在讨论矩阵加法之前,我们先来看两个数的加法操作,然后将其推广到矩阵乘法。
-
- import numpy
- import theano.tensor as T
- from theano import function
-
- x = T.dscalar("x")
- y = T.dscalar("y")
- z = x + y
- addition = function([x, y], z)
-
- x = 100
- y = 200;
- print("加法结果:%d" % addition(x, y))
在上面代码中首先定义两个标量x和y,然后定义z为x与y之和,接着定义函数addition,功能是求两个标量之和。在完成上述定义之后,我们为标量x和y赋值,调用定义好的加法函数,打印出运算结果。
如果我们要做两个矩阵的加法,只需对上面的代码进行简单的修改即可,代码如下所示:
-
- import numpy
- import theano.tensor as T
- from theano import function
-
- x = T.dmatrix("x")
- y = T.dmatrix("y")
- z = x + y
- addition = function([x, y], z)
-
- x = [[1.0, 2.0], [3.0, 4.0]]
- y = [[10.0, 20.0], [30.0, 40.0]]
- print(addition(x, y))
打印结果如下所示:
从上面的代码可以看出,在Theano和Numpy下,线性代数的相关操作还是非常简单的。
作为参考,下面列出了我们经常使用的类型:
- byte: bscalar, bvector, bmatrix, brow, bcol, btensor3, btensor4
- 16-bit integers: wscalar, wvector, wmatrix, wrow, wcol, wtensor3, wtensor4
- 32-bit integers: iscalar, ivector, imatrix, irow, icol, itensor3, itensor4
- 64-bit integers: lscalar, lvector, lmatrix, lrow, lcol, ltensor3, ltensor4
- float: fscalar, fvector, fmatrix, frow, fcol, ftensor3, ftensor4
- double: dscalar, dvector, dmatrix, drow, dcol, dtensor3, dtensor4
- complex: cscalar, cvector, cmatrix, crow, ccol, ctensor3, ctensor4