作者:Aakash Nain
编译:weakish
编者按:到底该选择TensorFlow还是Keras,是深度学习初学者经常纠结的一个问题。数据科学家Aakash Nain比较了TensorFlow和Keras,希望有助于选择合适的框架。
深度学习库/框架流行度(来源:Google)
深度学习无处不在,大量的深度学习库让初学者无所适从。这篇文章重点关注TensorlFlow和Keras两者之间的选择。TensorFlow是最著名的用于深度学习生产环境的框架。它有一个非常大非常棒的社区。然而,TensorFlow的使用不那么简单。另一方面,Keras是在TensorFlow基础上构建的高层API,比TF(TensorFlow的缩写)要易用很多。
既然Keras基于TensorFlow,那么两者有何区别?既然Keras对用户更友好,为什么我还需要使用TF来构建深度学习模型呢?下面一些内容将帮助你做出选择。
快速开发原型
如果你想快速创建、测试一个神经网络,写尽可能少的代码,那么选择Keras。花不了多少分钟,你就能用Keras创建简单或很复杂的神经网络。和API如此强大,基本上能做到你可能想要做的任何事情。让我们看一个例子吧:
收工!!就是这么容易!
没有人不喜欢Pythonic!!
Keras的开发设计注重用户友好,因而某种意义上它更加pythonic。模块化是Keras的另一个优雅的设计指导原则。Keras中的任何东西都可以表示为模块,用户可以根据需要将其进一步组合。
弹性
有时候你不想用现成的东西,想要自己定义一些东西(比如,损失函数、测度、网络层,等等)。
尽管Keras 2的设计让你可以实现几乎所有你想要的东西,但是我们都知道底层的库提供了更多弹性。TF同样如此。相比Keras,TF允许你进行更多调整。
功能性
尽管Keras提供了创建深度学习模型一般所需的所有功能性,它还是不如TF提供得多。相比Keras,TensorFlow提供更多高级操作。当你从事研究或开发特殊种类的深度学习模型时,这一点是十分便利的。下面是一些例子:
线程和队列
队列是一个强大的机制,可以异步地计算图中的张量。类似地,你可以使用多个线程执行同一会话,通过并行运算加速操作。下面是一个在TensorFlow中使用队列和线程的简单例子:
调试器
TensorFlow有一个专门的调试器,为内部结构和正在运行的TensorFlow图的状态提供了可见性。从调试器获得的洞见可以加速调试训练和推断阶段的多种bug。
TensorFlow调试器截屏(来源:TensorFlow文档)
控制
就我的经验而言,你对神经网络的控制越多,你对神经网络在做什么的理解就更深。TF让你可以更多地控制神经网络。在TF中对权重和梯度进行操作有如神助。
例如,假设你的模型有三个变量,比如、、,你可以选择变量是否可以训练。你只需写一行代码就可以办到:
在训练阶段,梯度可以提供大量信息。你想控制梯度?当然可以,看下面的例子:
(以上代码样例取自 CS 20SI: TensorFlow for Deep Learning Research)
结论(TL;DR)
除非你正从事研究性质的工作或开发某种特殊种类的神经网络,选择Keras(相信我,我是一个Keras党!!)使用Keras快速构建非常复杂的模型仍然超容易。
如果你想要更精细地控制你的网络,或者想要仔细查看你的网络发生了什么,那么TF是正确的选择(不过有时TF的语法会让你做噩梦的)。不过,现在TF已经集成了Keras,所以更明智的做法是使用创建你的网络,然后根据需要在你的网络中插入纯TensorFlow。简而言之,
+=
领取专属 10元无门槛券
私享最新 技术干货