在开始深度学习项目之前,选择一个合适的框架是非常重要的,因为选择一个合适的框架能起到事半功倍的作用。研究者们使用各种不同的框架来达到他们的研究目的,这也侧面证明了深度学习领域的百花齐放。全世界流行的深度学习框架有PaddlePaddle、TensorFlow、Caffe、Theano、Keras、Torch和PyTorch。
Google开源的TensorFlow是一款使用C++语言开发的开源数学计算软件,使用数据流图(Data Flow Graph)的形式进行计算。图中的节点代表数学运算,而图中的线条表示多维数据数组(Tensor)之间的交互。TensorFlow灵活的架构可以部署在一个或多个CPU、GPU的计算机及服务器中,或者使用单一的API应用在移动设备中。TensorFlow最初是由研究人员和Google Brain团队针对机器学习和深度神经网络进行研究而开发的,开源之后几乎可以在各个领域适用。
TensorFlow是全世界使用人数最多、社区最为庞大的一个框架,因为是Google公司出品,所以维护与更新比较频繁,并且有着Python和C++的接口,教程也非常完善,同时很多论文复现的第一个版本都是基于TensorFlow写的,所以是深度学习框架里默认的老大。
PyTorch的前身便是Torch。Torch是纽约大学的一个机器学习开源框架,几年前在学术界非常流行,包括Lecun等都在使用。但是由于其使用的是一种绝大部分人都没有听过的Lua语言,导致很多人都被吓退。后来随着Python的生态越来越完善,Facebook人工智能研究院推出了PyTorch并开源。PyTorch不是简单地封装Torch并提供Python接口,而是使用Python重新编写了很多内容,使其不仅更加灵活、支持动态图,而且提供了Python接口。它由Torch7团队开发,是一个以Python优先的深度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这是很多主流深度学习框架(比如TensorFlow等)都不支持的功能特性。
Keras是一个对小白用户非常友好且简单的深度学习框架,严格来说它并不是一个开源框架,而是一个高度模块化的神经网络库。它是一个用Python编写的高级神经网络API(高层意味着会引用封装好的的底层),能够以TensorFlow、CNTK或者Theano作为后端运行。Keras的特点是能够快速实现模型的搭建,能够把我们的想法迅速转换为结果。TensorFlow的API比较底层,有时候做一件很简单的事情要写很多辅助代码。而Keras的接口设计非常简洁,做同样的事情,Keras的代码大概是TensorFlow的三分之一到五分之一。
深度学习框架的出现降低了深度学习入门的门槛,我们不需要从复杂的神经网络开始编写代码,可以根据需要选择已有的模型,通过训练得到模型参数,也可以在已有模型的基础上增加自己的层(Layer),或者是在顶端选择自己需要的分类器和优化算法(比如常用的梯度下降法)。当然也正因如此,没有什么框架是完美的,就像一套积木里可能没有你需要的那一种积木,所以不同的框架适用的领域不完全一致。总的来说深度学习框架提供了一系列的深度学习的组件(对于通用的算法,里面会有实现),当需要使用新的算法的时候,就需要用户自己去定义,然后调用深度学习框架的函数接口使用用户自定义的新算法。