TensorFlow学习系列之二:深度学习框架比较

“工欲善其事,必先利其器”。事实上,适用于深度学习的“器”很多,各有特色,也各有千秋。下面我们对其它几个比较流行的深度学习框架,给予简单介绍,以便给读者提供一个宏观的认知。

11.2.1 Theano

Theano是一个偏向底层的深度学习框架,它开启了基于符号运算的机器学习框架的先河。Theano支持自动的函数梯度计算,带有Python接口并集成了Numpy。所以,从严格意义上来说,Theano就是一个基于Python和Numpy而构建的数值计算工具包。

相比于TensorFlow、Keras等框架,Theano更显学术范,它并没有专门的深度学习接口。比如说,Theano并没有神经网络的分级。因此,用户需要从底层开始,做许多工作,来创建自己需要的模型。

框架毕竟就是个框架,最终要能出活,才是硬道理。局限于其底层特性,Theano在出活效率上,表现得“差强人意”,当开发效率更高的后起之秀蜂拥而出时,也该是它退出江湖之日。

Theano开发始于2007年,早期的开发者包括深度学习大家约书亚·本吉奥(Yoshua Bengio)和他的学生伊恩·古德费洛(Ian Goodfellow,1987年出生的80后,GAN框架的提出者)。在2017年9月29日,本吉奥宣布,在发布1.0版本后,Theano将光荣退休(图11-4)[1]

图11-4  Theano的退休信

虽然Theano已开始淡出历史舞台,但其功绩不可磨灭。其最大的“技术遗产”可能就在于,它极大启迪或培养了其他深度学习框架。某种程度上,TensorFlow、Keras都继承了它的部分基因。

11.2.2 Keras

Keras是一个纯Python编写的深度学习库,它提供高层神经网络API(应用程序接口),通过一系列的配置,它可以工作在CNTK(微软公司开发的一款深度学习开发框架)、Theano和TensorFlow等框架之上,可视为是上述框架下的二次封装。也就是说,如果想用Keras,必须预先安装上述框架的一种或多种。

Keras的语法简洁,用户可以很直观地了解它的指令、函数和每个模块之间的连接方式。作为极简主义代表,Keras经过高度的封装,在一些场景下,它仅需几行代码,就能构建一个能够正常工作的神经网络,或十几行代码就能搭建一个AlexNet网络(2012年ImageNet竞赛冠军获得者Alex Krizhevsky设计的卷积神经网络)。这种高效性,是其它深度学习框架难以企及的。

图11-5  Keras的图标与口号

这样看来,Keras简直太好了。Keras的宣传口号就是“You have just found Keras”,有点“你才发现Keras”的感叹味道。但不要过于乐观,有时候,某个事物的优点,也恰是它的缺点,就看你从哪个角度来审视它了。

Keras的高度封装性,的确让用户的开发效率变得很高,但就如同用“傻瓜照相机”来拍照一样,轻轻一按,甚至无需对焦,就能拍出效果还能接受的照片来,但如果你想手动调节相机参数,拍出个性化的、高质量照片,那“傻瓜照相机”就如同“傻瓜”一样,无能为力。因为它的高度封装性,已不容你“置喙”于它的个性化设置。

类似地,Keras的缺点就在于,它的封装性(可视为黑盒)带来了一定程度上的不灵活性,导致用户难以订制,而且运行速度也不甚理想。此外,相比于TensorFlow社区的“热火朝天”,Keras社区的不太活跃,这导致它的部分文档可读性不高。

11.2.3 Caffe

Caffe的成名,最早源于在加州大学伯克利分校(University of California, Berkeley)博士生贾扬清撰写的一篇论文:“Caffe: Convolutional architecture for fast feature embedding [3]”,顾名思义,它的主要用途主要体现在“用于快速特征提取的卷积架构”。这篇有关Caffe的论文,一经面世,就受到世人的极大关注,谷歌学术显示它的引用次数已超过5000+,可见其受关注程度之高。目前它已被广泛应用在工业界和学术界。

图11-6  Caffe的图标

设计之初,Caffe仅仅关注计算机视觉的处理,可视为一个面向图像处理的专用卷积神经网络(CNN)框架。但随着它的开源(遵循BSD协议),社区人员不断“添砖加瓦”,让它的通用性日臻完美,它也开始在文本、语音及时间序列数据等领域,都有着非凡的表现。

Caffe的一个突出优势在于,它有一个模型百宝箱——Model Zoo(模型动物园),在这个园子里,汇集了大量已经训练好的经典模型(如AlexNet、VGG、Inception、ResNet等)。这样一来,一些常用模型,无需用户训练,采用拿来主义,挑好拿来就用,节省了大量模型训练时间。如果说高度封装性成就了Keras的“极简主义”,那么ModelZoo成就了Caffe的“极速主义”

“黄金无足色,白璧有微瑕。”Caffe自然也有其不足之处。首先,它不够灵活,模型虽然可以拿来就用,但倘若稍作变更,都需要用户利用C++和CUDA 更新底层代码。

其次,源于其诞生基因,它天生对卷积神经网络(Convolutional Neural Network,CNN)有着卓越的支持,但对于递归神经网络(Recurrent Neural Network,RNN)和LSTM(Long Short-Term Memory,长短期记忆)的支持上,表现不佳。

11.2.4 PyTorch

PyTorch是非常有潜力的后起之秀,是由Torch7团队开发的一款深度学习框架。它脱胎于另一款深度学习框架——Torch。Torch的编程语言是Lua。这是一门用C语言编写的、可扩展的轻量级编程语言。但由于Lua语言相对小众化,导致Torch的受众也非常有限,这成为Torch发展的最大的一个障碍。

目前,深度学习编程语言绝大部分以Python实现为主。在这个大趋势下,Torch7团队改用Python重新开发了Torch,取名为PyTorch。PyTorch非常年轻,2017年3月才开源发布。一经发布,PyTorch就受到了社区的热烈支持。它的主要优点在于支持动态神经网络。

图11-7  PyTorch的图标

对于Caffe和TensorFlow等框架,如果想改变网络结构,就必须一切从头开始,需要重新把前面的轮子再造一遍。不同于这些框架,PyTorch通过一种反向自动求导计数,可以让用户零延迟的改变神经网络的行为。此外,PyTorch的设计思路是线性的,代码直观易用,调试方便。

当然,PyTorch也有不足。它最大的不足之处就是“太年轻”。2017年12月面世的还是beta测试版,因此它在整体上不甚成熟。由于太新,也导致社区力量不够强大。但后生可畏,仍然不容小觑。

事实上,有关深度学习的计算框架层出不穷,远远不止前文提及的几个。比如,比较出名的框架还有MXNet(亚马逊AWS官方推荐的深度学习引擎,早期主要开发者以李沐先生为核心)、Deeplearing4j(国外创业公司Skymind的一款产品,“4j”的含义就是“for Java”,顾名思义,这是一个专为Java用户编写的深度学习框架)、Lasagne(一个基于Theano的轻量级的神经网络库)、Neon(Nervana Systems开发的深度学习框架,在麦克斯韦架构GPU下提速较快)、DIGITS(Deep Learning GPU Trainning System,是一个针对GPU的Caffe高级封装,能在浏览器中完成Caffe相关操作)、Chainer(由日本公司Preferred Networks 于2015年发布的深度学习库)、Leaf(一款基于Rust语言的跨平台深度学习库)。诸如此类,不再一一列举。

根据“存在即合理”的哲学理念,之所以这些框架能存在、能发展,肯定是因为它们各自找到了自己存在价值的“细分市场”。所以,读者朋友需要根据自己的应用场景,来选择适合自己的计算框架,倒不必拘泥于本章的主讲对象TensorFlow。比如说,如果你公司的产品主要通过Java开发为主,并以Java Web的形式发布,那么TensorFlow未必就是最适合你的(当然TensorFlow也提供Java接口),而相对小众的Deeplearing4j或许才是你更佳的选择。



[1] MILAand the future of Theano .https://groups.google.com/forum/?spm=5176.100239. blogcont255175.25.VgtC6r#!msg/theano-users/7Poq8BZutbY/rNCIfvAEAwAJ


节选自 张玉宏《深度学习之美》章节,电子工业出版社,博文视点,2018年

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值