深度学习算法实践2---线性代数和Numpy的使用

在下载了Theano源码之后,我们同时以开发模式安装了Theano。下面我们来尝试使用Numpy和Theano作一些简单的线性代数运算,熟悉一下这两库的基本使用方法,为下面的神经网络算法学习打好基础。

[python]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. # 测试开发环境是否正确,定义二维数组及常数与数组相乘  
  2. import numpy  
  3. from theano import *  
  4. import theano.tensor as T  
  5.   
  6. mtx = numpy.asarray([[1.02.0], [3.04.0], [5.06.0]])  
  7. scale = 2.0  
  8. newMtx = scale * mtx  
  9.   
  10. print("二维数组乘以常数: %f, %f" % (newMtx[00], newMtx[20]))  
在引入了我们所需要的类之后,我们首先声明了一个矩阵,这里是一个3*2的二维数组mtx,接着我们将一个常数乘以矩阵mtx,得到新的矩阵newMtx,最后我们打印出第一行第一列和第三行第一列的值。

从上面这个简单的例子,我们可以看到,Theano和Numpy的使用还是非常简单的。

下面来看两个矩阵的加法。其实从本质上来说,向量是一维数组,矩阵在是二维数组,张量是三维数组,而我们所熟悉的常数,即标量,实际上是零维数组。所以在讨论矩阵加法之前,我们先来看两个数的加法操作,然后将其推广到矩阵乘法。

[python]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. # 两个数的加法  
  2. import numpy  
  3. import theano.tensor as T  
  4. from theano import function  
  5.   
  6. x = T.dscalar("x")  
  7. y = T.dscalar("y")  
  8. z = x + y  
  9. addition = function([x, y], z)  
  10.   
  11. x = 100  
  12. y = 200;  
  13. print("加法结果:%d" % addition(x, y))  
在上面代码中首先定义两个标量x和y,然后定义z为x与y之和,接着定义函数addition,功能是求两个标量之和。在完成上述定义之后,我们为标量x和y赋值,调用定义好的加法函数,打印出运算结果。

如果我们要做两个矩阵的加法,只需对上面的代码进行简单的修改即可,代码如下所示:

[python]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. # 两个矩阵的加法  
  2. import numpy  
  3. import theano.tensor as T  
  4. from theano import function  
  5.   
  6. x = T.dmatrix("x")  
  7. y = T.dmatrix("y")  
  8. z = x + y  
  9. addition = function([x, y], z)  
  10.   
  11. x = [[1.02.0], [3.04.0]]  
  12. y = [[10.020.0], [30.040.0]]  
  13. print(addition(x, y))  
打印结果如下所示:

[python]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. [[ 11.  22.]  
  2.  [ 33.  44.]]  
从上面的代码可以看出,在Theano和Numpy下,线性代数的相关操作还是非常简单的。

作为参考,下面列出了我们经常使用的类型:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. byte: bscalar, bvector, bmatrix, brow, bcol, btensor3, btensor4  
  2. 16-bit integers: wscalar, wvector, wmatrix, wrow, wcol, wtensor3, wtensor4  
  3. 32-bit integers: iscalar, ivector, imatrix, irow, icol, itensor3, itensor4  
  4. 64-bit integers: lscalar, lvector, lmatrix, lrow, lcol, ltensor3, ltensor4  
  5. float: fscalar, fvector, fmatrix, frow, fcol, ftensor3, ftensor4  
  6. double: dscalar, dvector, dmatrix, drow, dcol, dtensor3, dtensor4  
  7. complex: cscalar, cvector, cmatrix, crow, ccol, ctensor3, ctensor4  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值