1.3 深度学习工具介绍和对比

深度学习的框架很多,作者选取了几个最流行的深度学习框架来分别讲述它们的优缺点,读者可以根据自己的实际情况选取适合自己的学习框架。

1.3.1 Caffe

Caffe是一款老牌的深度学习框架,它主要运用在视频和图像处理等方面。对其他深度学习应用,比如文本、声音和时序数据等,Caffe并不是一个好的选择。Caffe实现基于C/C++,它使用MATLAB和Python作为接口语言。

优点:

● 使用Python进行开发;

● 在前馈网络和图像处理上较好;

● 在微调已有网络方面较好;

● 不写任何代码就可训练模型。

缺点:

● 不擅长循环网络;

● 需要为新的 GPU 层编写 C++/CUDA;

● 面对大型网络(GoogLeNet、ResNet)有点吃力;

● 不可扩展;

● 无商业化支持。

1.3.2 TensorFlow

谷歌作为科技界的龙头老大,也有自己的深度学习框架——TensorFlow,TensorFlow的出现基本上取代了Theano框架,当然读者可以发现这两个框架的众多雷同之处。

和大部分深度学习框架的编程语言类似,TensorFlow 框架语言使用C/C++,使用C语言的引擎机制可以加速其运行,接口语言使用Python。对于有众多开发者的Java社区来说这并不友好,当然Java受制于其虚拟机的原因并不是很适合于深度学习。

TensorFlow的框架不仅解决深度学习方面的问题,也涉及强化学习等其他算法。

优点:

● 计算图抽象,如同Theano;

● 比Theano的编译速度更快;

● 进行可视化的TensorBoard;

● 数据和模型并行;

● GitHub社区非常活跃,远超其他深度学习框架的活跃度。

缺点:

● 比其他框架慢;

● 预训练模型不多;

● 计算图是纯Python的,因此更慢;

● 无商业化支持;

● 需要退出到Python才能加载每个新的训练批处理(Batch);

● 不能进行太大的调整;

● 在大型软件项目上,动态键容易出错。

1.3.3 Torch

Torch是用Lua语言编写的面向机器学习算法的计算框架。这个框架深受大型科技公司如Facebook、Twitter等的喜爱,也广泛地运用在它们的内部项目中,它们拥有专门的内部团队开发自己的深度学习平台。

优点:

● 很多容易结合的模块碎片;

● 易于编写自己的层类型和在GPU上运行;

● Lua(大部分库代码是Lua语言,易于读取);

● 大量的预训练模型。

缺点:

● Lua是小众语言;

● 需要编写自己的训练代码;

● 对循环神经网络不太好;

● 没有商业化支持;

● 糟糕的文档支持;

● 不能即插即用。

其他的深度学习框架如Theano、CNTK、DSSTNE和MXNet等在这里就不做介绍,读者可以自行搜索相关资料。这里值得一提的是国内的百度公司也推出了自己的深度学习框架——PaddlePaddle,作者没有深入地研究这个框架,不过相比于国外的深度学习框架,这款国内的框架应该会更容易上手,毕竟没有语言障碍。当然其官网提供的模型和案例也很丰富,唯一的缺点是只支持在Docker中使用,所以还需要使用者有Docker的基础,算是一点小小的遗憾吧。