深度学习框架比较

摘录自张玉宏的《深度学习之美》,作为自己的学习笔记,这样就能对个个框架的大致用法有了系统的了解!

深度学习框架比较

“工欲善其事,必先利其器。”事实上,适用于深度学习的“器”有很多,如 Theano、 Keras、 Caffe 及 Pytorch 等,它们各有特色。 下面我们对这几款比较流行的深度学习框架分别给予简单 的介绍,以期给读者提供一个宏观的认知。

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将光荣退休.

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

2. Keras

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

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

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

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

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

3. Caffe

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

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

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

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

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

4. Pytorch

PyTorch,是由 Torch7 团队开发的一款深度学习框架,它是非常有潜力的后起之秀。 从历史渊源上来讲,它脱胎于另一款深度学习框架一一Torcho Torch 本身也很优秀,但它的编程语言是 Lua,这是一门用 c 语言编写的、 可扩展的轻量级编程语言。 正由于Lua 语言的小众化, 导致Torch 的受众也有限,这成为Torch 发展的一大障碍。

目前,深度学习社区的编程语言,绝大多数以 Python 实现为主。 在这个大趋势下,“识时务 者为俊杰”, Torch7 团队改用 python重新开发了 Torch,取名为 PyTorch.

PyTorch 非常年轻, 2017 年 3 月才开源发布。一经发布, PyTorch 就受到了社区的热烈支持。 PyTorch 的设计思路是线性的,代码直观易用,调试方便。 它的主要优点还在于,它能够支持 动态神经网络。 我们知道,对于 Caffe 和 TensorFlow 等框架,如果想改变网络结构,就必须一 切从头开始,需要重新把前面的轮子再造一遍。 不同于这些框架, PyTorch 通过一种反向自动 求导计数,可以让用户零延迟地改变神经网络的行为。

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

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

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

猜你喜欢

转载自blog.csdn.net/YPP0229/article/details/94172251