目前市面上主流深度学习框架近十余种,每种框架各具特色。如何选择合适的深度学习框架?本篇对主流深度学习框架进行综合比较,帮助大家理清思路。

本篇比较指标包括:安装成本、代码理解程度、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

良好

良好

良好

优秀

良好

良好

良好


看过上述对比,大家可以根据自己的需求,选择合适的深度学习框架。