在一条Reddit评论中,Keras的作者、Google AI研究员Francois Chollet发布了一则令人兴奋的消息:Keras将成为首个被添加到Google核心TensorFlow中的高级库,这将有效地使其成为TensorFlow的默认API。出于多种原因,这是一个极好的消息!
作为背景信息,Keras是一个高级Python神经网络库,可以在TensorFlow或Theano之上运行。还有其他可以在TensorFlow之上使用的高级Python神经网络库,例如TF-Slim,尽管这些库开发得较少,并且不是核心TensorFlow的一部分。
使用TensorFlow让我觉得自己不够聪明,无法使用它;而使用Keras让我觉得神经网络比我原来想的要容易。这是因为TensorFlow的API冗长且令人困惑,而Keras拥有我所体验过的最精心设计、最富有表现力的API。在我第一次与TensorFlow进行几次令人沮丧的交互后,我曾不好意思公开批评它。它感觉非常笨拙和不自然,但我确信这是我的不足。然而,Keras和Theano证实了我的怀疑:张量和神经网络不必如此痛苦。(此外,在我们深度学习课程的第二部分中,Jeremy将展示一些技巧,以便更容易地在Tensorflow中编写自定义代码。)
在大学的一次作业中,我曾使用硬件描述语言通过在CPU寄存器中进行加法和移位来编写除法代码。这是一项有趣的练习,但我绝对不想用这种方式来编写神经网络。使用更高级别的语言有很多优点:编码更快、bug更少、痛苦更少。Keras的好处远不止于此:它非常适合神经网络的概念,以至于Keras改善了我和Jeremy对神经网络的思考方式,并促进了新的发现。Keras让我更擅长神经网络,因为语言抽象与神经网络概念非常契合。
用我思考的同一概念语言编写程序,使我能够将注意力集中在我试图解决的问题上,而不是编程语言的“人工痕迹”(artifacts)。当我大部分精力都花在在我脑中的抽象和语言的抽象之间转换时,我的思维变得缓慢而模糊。TensorFlow影响我生产力的方式,就像必须用汇编语言编程会影响我的生产力一样。
正如Chollet所写,“如果你想长期使用高级的面向对象TF API,Keras是最佳选择。”我对这个消息感到非常兴奋。
注:对于我们的面向程序员的深度学习实践课程,我们使用了Keras和Theano。对于面向程序员的深度学习实践课程第二部分,我们计划使用Keras和TensorFlow。我们更喜欢Theano而不是TensorFlow,因为Theano更优雅,并且不会让作用域(scope)变得超级烦人。不幸的是,只有TensorFlow支持我们在第二部分想教授的一些内容。
更新:我上周起草了这篇文章。发布后,我在Twitter上看到Francois Chollet几个小时前已经宣布了将Keras集成到TensorFlow中的消息。