配色: 字号:
漫话深度学习及其应用(4)
2024-05-12 | 阅:  转:  |  分享 
  
漫话深度学习及其应用(4)

胡经国



(续前)

九、深度学习框架

1、深度学习框架概述

深度学习框架(Deep Learning Framework,DLF),是指应用于深度学习的框架。其特点是开源的。其作用是降低了深度学习研究的入门门槛。

在开始深度学习项目研究之前,选择一个合适的深度学习框架是非常重要的;因为选择一个合适的深度学习框架能够起到事半功倍的作用。研究者们使用各种不同的深度学习框架来达到他们的研究目的,从侧面印证出深度学习领域百花齐放的局面。

在深度学习的初始阶段,每个深度学习研究者都需要写大量的重复代码。为了提高工作效率,这些研究者就将这些代码写成了一个“框架”放到网上让所有研究者一起使用。接着,在网上就出现了“不同的框架”。随着时间的推移,其中最为好用的“几个框架”被大量的人使用,从而流行了起来。

全世界最为流行的深度学习框架有:

Tensorflow、Caffe、Theano、MXNet、Torch和PyTorch。

2、Tensorflow

Google 开源的Tensorflow(张量流),是一款使用C++语言开发的开源数学计算软件。它使用数据流图(Data Flow Graph,DFG)的形式进行计算。在数据流图中的节点代表数学运算;而该图中的线条则表示多维数据数组(tensor)之间的交互。

Tensorflow灵活的架构可以部署在具有一个或多个CPU(中央处理器)、GPU(图形处理器)的台式机及服务器中,或者使用单一的API(应用程序编程接口)应用在移动设备中。

Tensorflow最初是由研究人员和Google Brain 团队针对机器学习和深度神经网络进行研究而开发的;其在开源之后几乎可以在各个领域适用。

Tensorflow是全世界使用人数最多、使用社区最为庞大的一个框架。因为由Google公司出品,所以维护与更新比较频繁;并且,具有Python和C++语言的接口,其教程非常完善。同时,很多论文复现的第一个版本都是基于Tensorflow写的,所以是深度学习界默认的“框架老大”。

2、Caffe

和Tensorflow名气一样大的是深度学习框架Caffe。它由加州大学伯克利的Phd贾扬清开发。其全称是Convolutional Architecture for Fast Feature Embedding(用于快速特征嵌入的卷积架构)。它是一个清晰而高效的开源深度学习框架;由伯克利视觉与学习中心(Berkeley Vision and Learning Center,BVLC)进行维护。

从它的名字就可以看出,其对于“卷积网络”的支持特别好。同时,也是用C++语言编写的。但是,并没有提供Python接口,只提供的C++语言接口。

Caffe之所以流行,是因为在之前很多Image Net(影像网)比赛里面使用的网络都是用Caffe编写的,所以如果你想使用这些比赛的网络模型就只能使用Caffe。这也就导致了很多人直接转到Caffe这个框架下面。

Caffe的缺点是:不够灵活,内存占用高,只提供了C++语言接口。Caffe的升级版本Caffe 2已经开源了,修复了一些问题,同时工程水平得到了进一步提高。

3、Theano

Theano于2008年诞生于蒙特利尔理工学院。由其派生出了大量的深度学习Python软件包;其中最著名的包括Blocks和Keras。

Theano的核心是一个数学表达式的编译器。它知道如何获取你的结构,并且使之成为一个使用numpy、高效本地库的高效代码,如BLAS和本地代码(C++),在CPU或GPU上尽可能快地运行。它是为了在深度学习中处理大型神经网络算法所需的计算而专门设计的,是这类库的首创之一(发展始于2007年),被认为是深度学习研究和开发的行业标准。

但是,开发Theano的研究人员大多去了Google参与Tensorflow的开发。所以,从某种程度来讲Tensorflow就像Theano的“孩子”。

4、MXNet

MXNet的主要作者是李沐。它最早就是由几个人抱着纯粹对技术和开发的热情做起来的,如今已成为亚马逊的官方框架。它具有非常好的分布式支持,而且性能特别好,占用显存低;同时,其开发的语言接口不仅仅有Python和C++,还有R,Matlab,Scala,JavaScript,等,可以说能够满足使用任何语言的人。

MXNet 是亚马逊(Amazon)选择的“深度学习库”,并且也许是最优秀的库之一。

但是,MXNet的缺点也很明显:教程不够完善,使用的人不多,导致社区不大;同时每年很少有比赛和论文是基于MXNet实现的,这就使得MXNet的推广力度和知名度不高。

5、Torch

Torch是一个具有大量机器学习算法支持的科学计算框架。其诞生已有十年之久,。但是,其真正起势得益于Facebook开源了大量Torch的深度学习模块和扩展。

Torch的特点在于特别灵活。但是,其另一个特殊之处是采用了编程语言Lua。在深度学习大部分以Python为编程语言的大环境之下,一个以Lua为编程语言的框架具有更多的劣势;这一项小众的语言增加了学习使用Torch这个框架的成本。

6、PyTorch

PyTorch的前身是Torch。其底层和Torch框架一样;但是,使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python语言接口。它是由Torch7团队开发的,是一个以Python优先的深度学习框架。它不仅能够实现强大的GPU加速;同时还支持动态神经网络,这是很多主流深度学习框架比如Tensorflow等都不支持的。

PyTorch既可以看作加入了GPU(图形处理器)支持的Numpy;同时也可以看成一个拥有自动求导功能的强大的深度神经网络。除了Facebook以外,它已经被Twitter、CMU和Salesforce等机构所采用。

NumPy(Numerical Python,数值Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表结构(Nested List Structure,NLS)要高效得多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算。

7、深度学习框架应用优势

深度学习框架的出现降低了深度学习入门的门槛。你不需要从复杂的“神经网络”开始编代码。你可以根据需要选择已有的模型,通过模型训练得到模型参数。你也可以在已有模型的基础上增加自己的layer(层),或者是在顶端选择自己需要的“分类器”和“优化算法”(比如常用的“梯度下降法”)。

当然,也正因如此,没有什么框架是完美的。就像在一套积木里可能没有你需要的那一种积木,所以不同的框架适用的领域不完全一致。

总的来说,深度学习框架提供了一系列的深度学习的组件(对于通用的算法,里面会有实现)。当需要使用新的算法时,就需要用户自己去定义;然后调用深度学习框架的函数接口,使用用户自定义的新算法。









3







献花(0)
+1
(本文系现代科普图...原创)