读书频道 > 网站 > 网页设计 > 机器学习算法原理与编程实践
1.2.3 矢量化编程与GPU运算
15-11-26    下载编辑
收藏    我要投稿   
本书从结构上阐明了研究机器学习理论和算法的方法。最重要的不是数学,也不是这些算法本身,而是思想的发展过程,这与之前所有的书籍都有所不同。全书分为三条主线:第一条主线:从第一代神经网络(线性分类器)立即去当当网订购

传统的计算机设计语言,例如C语言,是针对标量的,虽然也提供诸如数组、二维数组的数据结构,但这些结构的赋值、加法、数乘、转置、矩阵相乘还是要通过循环语句完成,十分麻烦,导致程序设计的复杂度也比较高。

mylist = [1,2,3,4,5]
length = len(mylist)
a = 10
for indx in xrange(length):
 mylist[indx] = a*mylist[indx]
print mylist
输出结果:
[10, 20, 30, 40, 50]

而基于矩阵的算法都是针对向量的,这里也称为矢量。为了简化程序的逻辑,就需要一种新的编程方法,处理基于矩阵的基本运算,这就是所谓的矢量化编程。

随着程序设计的发展,使用计算机实现矩阵运算越来越方便。最早实现矢量化编程的语言是Matlab的脚本语言,它极大的降低了数学领域程序设计的复杂度。因此大量的人工智能算法最早都是用Matlab语言写的。

Python自带的List结构,提供切片的功能可以部分实现矢量化编程。其扩展包Numpy提供了专门的矩阵数据结构和线性代数库,完全实现了矢量化编程。

import numpy as np

mylist = [1,2,3,4,5]
a = 10
mymatrix = np.mat(mylist)
print a*mymatrix
输出结果:
[[10 20 30 40 50]]

矢量化编程的一个重要特点就是可以直接将数学公式转换为相应的程序代码,极大方便了程序的阅读和调试,使复杂数学公式的实现变得简单和方便,本节和下一节所用的矢量化程序的代码一般只有一两行,即可完成复杂的数学运算。

无论是Matlab还是Python的矢量化编程都可以无缝的调用底层的C函数,还可以提高算法速度。为了提升特定数值运算操作,例如矩阵相乘、矩阵相加、矩阵-向量乘法、浮点运算的速度,数值计算和并行计算的研究人员已经努力了几十年。这个领域最出色的技术就是使用图形处理器的GPU运算。

英伟达(nVidia)公司在1999年发布GeForce256图形处理芯片时首先提出了GPU运算的概念。十几年的发展使单个GPU芯片在浮点运算、大规模并行计算方面,可以提供数十倍乃至上百倍于CPU的性能。GPU的流处理器也由几十个增加到最新的三千多个,浮点运算TFlops值也达到5以上。本书的第十章的深度学习部分专门讲解了GPU运算的Python框架 Theano。

对GPU运算比较熟悉的读者也可以将本书中较大规模的矩阵运算交由GPU完成。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站