《白话深度学习与TensorFlow》——3.4 如何选择好的框架

3.4 如何选择好的框架

作为计算模型来说,深度学习中的绝大部分基本理论早已沉淀成了固化的计算模块、函数或者算法包。就计算模型本身来说,框架之间的差别不会太大,也不可能太大,除非这个领域的理论层面得到了极大的突破,而且这个突破还是不同方向且掌握在个别组织手里的。而现在框架之间的差别主要出现在这几个地方。
第一,性能方面。
这一属性主要由底层的实现语言决定,底层运行比较快的仍旧是实现的语言。理论上说,运行速度最快的仍旧是C或C++一类,离着CPU指令近一些语言效率高一些。
笔者用过Torch、TensorFlow、Chainer、Caffe等多种框架,虽然没有经过系统地压测和对比以及时下流行的跑分测试,但仍然有个比较感性的感觉——相同情况下Torch运行的速度略快一些,而TensorFlow老实说确实不能算快的甚至是这几款里面比较慢的。不过笔者从来不觉得这是什么大问题,这种效率的差距仅仅是零点几倍或者一点几倍,而真正在工程实现方面的差距大多来自样本数量、网络设计等方面,这些方面的差距可能都是一两个数量级的(差10倍或者100倍),所以这种效率不是最重要的参考标志。
第二,社区活跃度。
这些开源的项目虽然多,但是社区活跃与否是个非常重要的因素,甚至几乎是首选的因素。活跃的社区意味着有更多的人正在使用这样一个项目,会有更多的人贡献代码,提交Bug,遇到错误你也很容易找到前人踩坑留下的垫坑石。因而做起项目来风险也相对比较小,学习起来进步也会快一些。
第三,语言。
这几乎是最不重要的一个方面,因为不管什么语言,实现的框架大多都会支持Python的“驱动”,或者我们称接口。当然也有很多比较执拗的框架只提供人家自己原生的接口,例如Torch只支持Lua脚本,CNTK只支持C++等。
说它不重要是因为,在这样一个应用场景中网络建立的逻辑比较有限,所以涉及的语法内容也非常有限,学习成本也不高,反正从逻辑和模型层面是没有差别的。
应该说TensorFlow在这些方面做得还都是令人满意的。首先它有着非常活跃的社区:www.tensorflow.org,主页的日均PV有40到50万之多。这对于一个小众化的技术网站已经是个不得了的数字了。
《白话深度学习与TensorFlow》——3.4 如何选择好的框架

它的英文社区比中文社区活跃得多,而且在*上的问题讨论也非常多,目前有8000多个被跟帖的帖子,每天都会有不少新帖出来,所以在成功的路上你不会孤单。
《白话深度学习与TensorFlow》——3.4 如何选择好的框架

语言嘛,Python肯定是首选,笔者大多是使用Python 2.7+ TensorFlow的方式来工作的,很方便。
性能就像我刚才所说的,虽然感觉上并不快,但是满足目前的工作已经足够了。而且这种数量级的效率提升是无法通过更换一个框架来实现的。
总体来说TensorFlow应该是所有深度学习框架中比较适合用来进行工程应用的。

上一篇:带你读《SAS数据分析开发之道 软件质量的维度》第三章通信交流3.5并行处理通信交流(一)


下一篇:教你随心操控线程状态 | 带你学《Java语言高级特性》之七