自己就是跳过了机器学习直接跨入深度学习的大门,所以一些主流框架可以帮助初学者快速上手,我来介绍几个比较popular的框架,虽然本人也不都是全会用。
- Theano是最早的深度学习框架之一,由Yoshua Bengio 和 Ian Goodfellow等人开发,是一个基于python、定位底层运算的计算库,Theano同时支持GPU和GPU运算。由于Theano开发效率较低,模型编译时间较长,同时开发人员转投Tensorflow等原因,Theano 目前已经停止维护。
- Scikit-learn 是一个完整的面向机器学习算法的计算库,内建了常见的传统机器学习算法支持,文档和案例也较为丰富,但是Scikit-learn 并不是专门面向神经网络而设计的,不支持GPU加速,对神经网络相关层的实现也较欠缺。
- Caffe 由华人贾扬清在2013年开发,主要面向使用卷积神经网络的应用场合,并不适合其它类型的神经网络的应用。Caffe 的主要开发语言是C++,也提供Python语言等接口,支持GPU和CPU。由于开发时间较早,在业界的知名度也较高,2017年Facebook推出了Caffe的升级版本Caffe2,Caffe2目前已经融入到Pytorch库中。
- Torch是一个非常优秀的科学计算库,基于较为冷门的编程语言Lua开发。Torch灵活性较高,容易实现自定义网络层,这也是PyTorch继承获得的优良基因。但是由于Lua语言使用人群较少,也是Torch一直未能获得主流应用。
- MXNet由华人陈天奇和李沐等人开发,是亚马逊公司的官方深度学习框架。采用了命令式编程和符号编程混合方式,灵活性高,运行速度快,文档和案例也较为丰富。
- Pytorch 是我目前做的毕业设计所使用的框架,这是Facebook基于原Torch框架推出的采用Python作为主要开发语言的深度学习框架。Pytorch借鉴了Chainer的设计风格,采用了命令式编程,使得搭建网络和调试网络非常方便。尽管Pytorch在2017年才发布,但是由于精良紧凑的接口设计,Pytorch在学术界获得了广泛好评。在Pytorch 1.0版本后,原来的Pytorch 与 Caffe2 进行了合并,弥补了Pytorch 在工业部署方面的不足。总的来说,Pytorch 是一个非常优秀的深度学习框架。
- Tensorflow 也是我较为熟悉的一个框架,这是我第一个接触的深度学习的框架。此框架是 Google 与2015年发布的深度学习框架,最初版本只支持符号式编程。得益于发布时间较早,以及Google 在深度学习领域的影响力,Tensorflow 很快成为最流行的深度学习框架。但是由于Tensorflow 接口设计频繁变动,功能设计重复冗余,符号式编程开发和调试非常困难等问题,Tensorflow 1.x版本一度被业界诟病。2019年,Google推出了Tensorflow 2正式版本,将以动态图优先模式运行,从而能够避免Tensorflow 1.x版本的诸多缺陷,已获得业界的广泛认可。
目前看来,Tensorflow 和Pytorch框架是业界使用最为广泛的两个深度学习框架,Tensorflow在工业界拥有完备的解决方案和用户基础,Pytorch得益于其精简灵活的接口设计,可以快速搭建和调试网络模型,在学术界获得好评如潮。Tensorflow 2发布后,弥补了1.x在上手难度方面的不足,使得用户能够同时轻松上手框架又能无缝部署网络模型至工业系统。
这里特别介绍Tensorflow 和Keras之间的联系和区别。Keras可以理解为一套高层API的设计规范,Keras本身对这套规范有官方的实现,在Tensorflow中也实现了这套规范,称为tf.keras模块,并且tf.keras将作为Tensorflow 2版本的唯一高层接口,避免出现接口重复冗余的问题。