深度学习框架对比与选择
Posted 迷途书童小陋室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习框架对比与选择相关的知识,希望对你有一定的参考价值。
注:本文根据作者(想减肥的蓝胖纸)近一年对Deep Learning的了解和学习,汇总和对比了近年来比较流行的4大深度学习框架,为初学者选择某一框架提供一些建议。所说框架并无“最好”与“最坏”之分,选择最终归结于您的技术背景,需求和期望。
文章全文约3500字,包括5副图,阅读时间大约6分钟。
深度学习能做什么
近年来,随着海量数据的积累和计算机硬件计算能力的提升,深度学习越来越广泛应用在各个方面。我们来看看深度学习能做哪些有意思的事情:
在计算机视觉领域,我们常用图像和视频数据来理解我们周围的世界。深度学习可以应用于图像分类(ResNet50),目标检测(Mask R-CNN),图像分割(UNET),图像恢复等领域。通俗一点讲,比如我们可以用神经网络对遥感图像进行分类,可以对人脸和车辆进行识别和检测,可以恢复损坏的照片,可以给照片自动着色,甚至直接从影像恢复三维信息。
在自然语言处理领域,我们希望计算机能够理解、解译、掌握并转化我们人类的语言。深度学习能够处理音频和文本数据,可应用于语言翻译(GMNT谷歌翻译)、语音识别、语音合成、情感分析以及自然语言生成等领域。
在医学领域,我们希望通过图像采集和图像解译的手段,准确评估和诊断疾病。深度学习可以应用于病变检测。比如利用CT,MRI,造影图像判断病人是否患有某种疾病。
还有一些有意思的应用:
Face2Face:由美国斯坦福大学开发的一款可以让视频里的人跟着你说话的软件,该软件能够识别一个人说话时的动作和表情,并把这重现在另一个人的脸上,秒变名人不是梦。
Pix2pix:基于对抗神经网络 (GAN) 实现的图像翻译。简而言之就是将一幅图像翻译成另一幅图像。比如你可以输入一幅简笔画,或者一些色块,网络能够基于输入的原图像,润色创造出一副新的完整图像,让你秒变灵魂画手。
自动书写生成:根据一些手写笔迹,利用深度学习技术就能用这些笔迹写出其他的词句,比如伦多大学的Alex Graves就教会了电脑用多种不同的风格来书写。
自动识别图片文字,破解验证码,或者快速处理扫描件,生成电子文档。
预测人幼年或老年时的外貌,可以帮助警方寻找失踪人口。
为何要用深度学习框架
如果您已经掌握了深度学习的核心算法,您当然可以使用Python或任何其他编程语言从头开始实现自己的神经网络模型。但是如果您需要实现更复杂的模型,如卷积神经网络(CNN)或循环神经网络(RNN)时,您会发现从头开始实现复杂模型是不切实际的,因此深度学习框架应运而生,它可以帮助您轻松实现您自己的神经网络:
不需要手写CUDA 代码能跑GPU;
容易构建大的计算图(computational graphs);
自动实现计算图中的梯度计算;
深度学习从此变得傻瓜;
掌握深度学习框架,前期要做哪些准备
熟悉Python编程语言;
掌握深度学习、神经网络基础知识,如前后向传播,梯度下降等算法
需要了解框架的基本原理,学习并掌握框架的基本概念和用法:
通常先从官方文档开始,浏览官方文档对框架基本概念和用法有一个大致的了解;
结合官方提供的快速入门例子,在自己的机器上安装并练习使用;
然后再从官方的模型库里面挑选一些算法,进行学习参考;
结合自己具体任务组建网络,查看 API 接口文档,解决实际任务。
深度学习框架总结
常见的深度学习框架如下图所示。这些深度学习框架已被广泛应用于计算机视觉、语音识别、自然语言处理与生物信息学等领域,并获取了极好的效果。每一类框架都以不同的方式进行构建,具有不同的特点。
2018年9月,Jeff Hale(参考网站https://towardsdatascience.com/deep-learning-framework-power-scores-2018-23607ddf297a?gi=ba06d6aa4cca)根据公司招聘、调研报告、网络搜索、科研论文、教程文档、GitHub热度等数据,评估了2018年11种深度学习框架的影响力,如下图所示。本文主要介绍前四个最流行的主流框架 (TensorFlow, Keras, Pytorch, Caffe),希望能够帮助初学者选择适合的学习框架。限于笔者个人使用经验和了解程度,对各个框架的评价可能有不准确的地方。
TensorFlow
概述
2015年11月谷歌(Google)出品,基于Python和C++编写。GitHub上最热,谷歌搜索最多,使用人数最多(笔者也是其中之一),大多数网上招聘工作描述中也提到了它。由于Google在深度学习领域的巨大影响力和强大的推广能力,TensorFlow一经推出就获得了极大的关注,并迅速成为如今用户最多的深度学习框架。2019年3月已发布最新的TensorFlow2.0 版本。
如果你最终想找一份深度学习的工作,最好学习下TensorFlow
官方网站:https://www.tensorflow.org/
优点
自带tensorboard可视化工具,能让用户实时监控观察训练过程
拥有大量的开发者,有详细的说明文档、可查询资料多
支持多GPU、分布式训练,跨平台运行能力强
具备不局限于深度学习的多种用途,还有支持强化学习和其他算法的工具
缺点
频繁变动的接口。TensorFlow的接口一直处于快速迭代之中,并且没有很好地考虑向后兼容性,这导致现在许多开源代码已经无法在新版的TensorFlow上运行,同时也间接导致了许多基于TensorFlow的第三方框架出现BUG
接口设计过于晦涩难懂,在设计TensorFlow时,创造了图、会话、命名空间、PlaceHolder等诸多抽象概念,对初学者来说较难上手。(不过,据称新的2.0版本对接口设计有了重大改进,笔者也很期待)
运行明显比其他框架速度慢
Keras
概述
Keras 于2015年3月首次发布,拥有“为人类而不是机器设计的API”,得到Google的支持。它是一个用于快速构建深度学习原型的高层神经网络库,由纯Python编写而成,以TensorFlow,CNTK,Theano和MXNet为底层引擎,提供简单易用的API接口,能够极大地减少一般应用下用户的工作量。
如果你是深度学习的初学者,想要快速入门,建议从Keras开始。
官方网站:https://keras.io/
优点
更简洁,更简单的API
丰富的教程和可重复使用的代码
更多的部署选项(直接并且通过TensorFlow后端),更简单的模型导出
支持多GPU训练
缺点
过度封装导致丧失灵活性,导致用户在新增操作或是获取底层的数据信息时过于困难
许多BUG都隐藏于封装之中,无法调试细节
初学者容易依赖于 Keras 的易使用性而忽略底层原理
PyTorch
概述
PyTorch于2016年10月发布,是一款专注于直接处理数组表达式的低级API。 前身是 Torch(一个基于 Lua 语言的深度学习库)。Facebook 人工智能研究院对PyTorch提供了强力支持。 PyTorch 支持动态计算图,为更具数学倾向的用户提供了更低层次的方法和更多的灵活性,目前许多新发表的论文都采用PyTorch作为论文实现的工具,成为学术研究的首选解决方案。
如果你是一名科研工作者,倾向于理解你的模型真正在做什么,那么就考虑选择PyTorch。
官方网站:https://pytorch.org/
优点
简洁易用:更少的抽象,更直观的设计,建模过程简单透明,所思即所得,代码易于理解
可以为使用者提供更多关于深度学习实现的细节,如反向传播和其他训练过程
活跃的社区:提供完整的文档和指南,作者亲自维护的论坛供用户交流和求教问题。当然与Tensorflow相比,社区还是更小
代码很Pythonic(简洁、优雅),更好的调试功能,默认的运行模式更像传统的编程,您可以使用常见的调试工具如pdb,ipdb或PyCharm调试器
缺点
无可视化接口和工具
导出模型不可移植,工业部署不成熟
代码冗余量较大
Caffe/Caffe2.0
概述
Caffe的全称是Convolutional Architecture for Fast Feature Embedding,它是一个清晰、高效的深度学习框架,于2013年底由加州大学伯克利分校开发,核心语言是C++。它支持命令行、Python和MATLAB接口。Caffe的一个重要特色是可以在不编写代码的情况下训练和部署模型。
如果您是C++熟练使用者,并对CUDA计算游刃有余,你可以考虑选择Caffe
官方网站:http://caffe.berkeleyvision.org/
优点
核心程序用C++编写,因此更高效,适合工业界开发
网络结构都是以配置文件形式定义,不需要用代码设计网络
拥有大量的训练好的经典模型(AlexNet、VGG、Inception)在其 Model Zoo里
缺点
缺少灵活性和扩展性:Caffe是基于层的网络结构,如果要实现一个新的层,用户必须要利用C++实现它的前向和后向传播代码。如果需要新层运行在GPU上,则同时还需要用户自己实现CUDA代码。这种限制使得不熟悉C++和CUDA的用户扩展Caffe十分困难
依赖众多环境,难以配置,GitHub上基于Caffe的新的项目越来越少,已经很少用于学术界
缺乏对递归网络RNN和语言建模的支持,不适用于文本、声音或时间序列数据等其他类型的深度学习应用
另外,Caffe2 于2017年由facebook团队发布,是一个兼具表现力、速度和模块性的开源深度学习框架。它沿袭了大量的 Caffe 设计,可解决多年来在 Caffe 的使用和部署中发现的瓶颈问题。但Caffe2仍然是一个不太成熟的框架,官网至今没提供完整的文档,安装也比较麻烦,编译过程时常出现异常,在GitHub上也很少找到相应的代码。
个人建议
如果您是初学者,掌握了Python的numpy、matplotlib等基础模块,考虑学习一个深度学习框架,我建议您从Keras开始,可以快速构建,训练和评估模型,而无需花费太多时间在数学实现细节上。
如果您已经掌握了Keras,并希望真正理解你的模型在做什么,或者您是科研工作人员,想借助工具实现您的idea开展研究,建议您选择易用灵活的PyTorch。
如果您想要熟练掌握需求量最大的框架,并且想从事深度学习相关工作,或者您从事工业场景应用和研发,建议您选择TensorFlow。
个人不太推荐用Caffe,尽管在极盛的时候,Caffe占据了计算机视觉研究领域的半壁江山。但在深度学习新时代到来之时,Caffe已经表现出明显的力不从心,诸多问题逐渐显现。如果您是Caffe重度使用者,建议关注Caffe2.0。
正如笔者前面所说,深度学习框架众多,并无最好与最坏之分。最重要的还是要深刻理解神经网络的基本概念,根据自己想要实现网络的类型,基于自己擅长的编程语言,考虑项目本身的特点和目标,选择最适合您的框架。最后,恭喜您走入深度学习的海洋,尽情遨游吧~
以上是关于深度学习框架对比与选择的主要内容,如果未能解决你的问题,请参考以下文章
解读对比13个深度学习框架后的选择——专访TensorFlow贡献者黄文坚