在下载了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))打印结果如下所示:
[[ 11. 22.] [ 33. 44.]]从上面的代码可以看出,在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