目前市面上主流深度学习框架近十余种,每种框架各具特色。如何选择合适的深度学习框架?本篇对主流深度学习框架进行综合比较,帮助大家理清思路。
本篇比较指标包括:安装成本、代码理解程度、API丰富程度、模型丰富程度、文档完整程度、训练过程、预测过程、学习资源。
安装成本
比较而言,容易安装的框架可以迅速俘获使用者。在这方面,各主流框架的介绍文档都给出具体步骤,并保证框架易于安装。
安装易用能手:PyTorch 和PaddlePaddle 相比而言,安装步骤不繁琐,代码简洁
代码理解
Python是大多数主流深度学习框架的前端语言。不同框架都定义了一套自己的用户层语义,供开发者描述所需要的计算。不同框架的用户语义设计差别很大,复杂程度也不尽相同。TensorFlow的前端语义极其丰富,带来的相应的问题是普通用户学习难度增大,没有足够的经验写出高效运行的代码,完成同样模型,使用TensorFlow的原生API与其它主流深度学习框架相比,代码量是最高的。同时TensorFlow各种高级封装层次太深,不利于用户理解。
代码理解能手:caffe 和PyTorch和 PaddlePaddle 前端用户语义设计简洁直观,抽象层次适中,适合大多数用户上手学习。
API丰富程度
API直译为应用程序接口,是一个程序与其他软件之间的沟通桥梁。调用API后,使用者不需要理解内部工作细节,也无需理解源码,给定正确的输入后就能得到预期的输出结果,可以更快的助推自己的想法落地。而深度学习的应用涉及多种场景,因此深度学习框架的API越丰富越鲁棒,也代表着框架的易用性越强,适用性越广泛。
API丰富能手:TensorFlow和PaddlePaddle。目前Paddle的API支持大部分模型实现,包含常见的CNN/RNN类模型、基于attention的模型、强化学习等,及其相关的数据预处理、分布式训练和预测等。
模型丰富程度
每种深度学习应用其背后都对应具体模型,而模型本身来源于算法。模型可以是深度学习框架提供的示例,也可以是开发者自己搭建的。一般而言,搭建模型的前提是大家能熟练掌握深度学习知识以及算法,投入足够时间的精力,于是乎基于深度学习框架的示例模型,可以大大减少这部分的工作。一般模型也会对应具体应用场景,模型越丰富,也能代表框架支持场景越丰富。
模型丰富程度能手:Tensorflow 和Keras
这两款开源框架的模型类型丰富,能达到state-of-the-art的效果,且配合模型也有丰富的数据集,同时也有社区可以进行问题交流。
文档完整程度
深度学习框架中的文档,相当于用户使用指南。一个完整的文档体系需要包含安装编译、设计思想、代码结构等模块。文档越完整,用户在使用过程中也可得到更多的指导,并有可能在未来为开源框架贡献项目经验或优质代码。
文档丰富小能手:TensorFlow 和 Pytorch 和 PaddlePaddle
这三种开源框架有较为详细的文档教程,可以在官网上获取,其中PaddlePaddle目前已有中文版的文档。
训练与预测过程
一般来说,根据模型的精度以及单机、多机、多卡运行时的速度这两个指标对训练过程的性能进行衡量。预测过程中,服务器端关注速度和显存占用,移动端关注速度和库的体积。运行典型模型,结合以上指标,可判断训练过程与预测过程的性能。
训练与预测过程小能手:Caffe 和 PaddlePaddle
学习资源
除了文档,其他的视频或纸质教程也属于深度学习框架的学习资源。一方面深度学习框架的官方会提供资源,另一方面比较厉害的贡献者博客也可以作为参考。
为了让大家更清晰,小PP根据对比指标,整理出表格供大家参考
框架 | 安装成本 | 代码理解程度 | API丰富程度 | 模型丰富程度 | 文档完整程度 | 训练预测过程 | 学习资源 |
TensorFlow | 良好 | 良好 | 优秀 | 优秀 | 优秀 | 良好 | 优秀 |
PyTorch | 优秀 | 优秀 | 良好 | 良好 | 优秀 | 良好 | 良好 |
Caffe | 良好 | 优秀 | 良好 | 良好 | 良好 | 优秀 | 良好 |
PaddlePaddle | 优秀 | 优秀 | 优秀 | 良好 | 优秀 | 优秀 | 优秀 |
Keras | 良好 | 良好 | 良好 | 优秀 | 良好 | 良好 | 良好 |
看过上述对比,大家可以根据自己的需求,选择合适的深度学习框架。