现在于 TensorFlow 上运行的 Keras

Keras 的目的是成为一个模型级框架,提供一组“乐高积木”,用于快速、直接地构建深度学习模型。在深度学习框架中,Keras 无疑处于抽象的顶层。

因此,Keras 本身不处理低级张量运算,例如张量积和卷积。其他团队已经开发出优秀的张量操作解决方案,例如蒙特利尔大学 LISA/MILA 实验室的 Theano,以及最近 Google 的 TensorFlow

当我们在 2015 年 3 月开始 Keras 时,Theano 是自然而然的选择。当时,它是唯一拥有我们所需一切的框架:基于 Python 的接口、自动微分,以及能够在 CPU 和 GPU 上无缝运行相同代码的能力。它还经过了良好的优化,速度极具竞争力。

从那时起,符号张量计算领域出现了很多创新,其中很多都追随着 Theano 的脚步。最值得注意的是,我们看到了两个新框架的出现:Nervana Systems 的 Neon 和 Google 的 TensorFlow。虽然 Neon 是目前速度更快的框架,但 TensorFlow 拥有 Google 的工程力量支持,毫无疑问,它在未来几个月内将会有很大改进。

现在是 Keras 利用这些进步的时候了。在过去的两周里,我们抽象了 Keras 的张量操作后端,并编写了该后端的两个实现,一个在 Theano 中,另一个在 TensorFlow 中。Neon 的实现也可能很快就会出现。

这对您意味着什么

如果您有任何用原生 Keras 编写的模型,您现在可以在 TensorFlow 中运行它们,而无需进行任何更改。是的,真的。有一些暂时的注意事项(请参阅“已知问题”),但只有一小部分模型会受到影响。当然,您也可以像以前一样继续在 Theano 上运行您的模型。

这也意味着,TensorFlow 方面的任何性能改进都将使您和您的研究受益。作为 Keras 的用户,您现在也搭上了 Google 的火箭飞船。

最后,这意味着您很快就能轻松地将您的 Keras 模型导出到移动设备,甚至拖拉机上(来自田纳西州的深度学习者,欢呼吧),只要开源 TensorFlow 中启用了此功能。机器人技术很可能成为未来几年深度学习的一个主要应用领域。

性能

在 CPU 上,以下是 一些基本示例脚本 的当前性能。这是在 2.2 GHz Intel Core i7 上运行的结果。

总而言之:与 TensorFlow 相比,Theano 具有经过良好优化的张量循环,但依赖于性能不佳的 CPU 卷积运算(当然,很少有人会真的尝试在 CPU 上训练卷积网络,尽管使用 TensorFlow 这样做并非完全不切实际)。

任务 TensorFlow Theano
mnist_mlp.py: 编译时间 (秒) 0.6 5.9
mnist_mlp.py: 每个 epoch 运行时间 (秒) 7.5 6.3
imdb_lstm.py: 编译时间 (秒) 39.3 38.3
imdb_lstm.py: 每个 epoch 运行时间 (秒) 283 123
mnist_cnn.py: 编译时间 (秒) 0.8 11.4
mnist_cnn.py: 每个 epoch 运行时间 (秒) 190 3230

GPU 上的类似基准测试将很快添加。

已知问题

由于 TensorFlow 当前的限制,并非所有 Keras 功能现在都可以在 TensorFlow 中使用。但是,这些限制正在修复中,并将在即将发布的 TensorFlow 版本中解除。如果您需要以下任何功能,则在切换到 TensorFlow 之前需要稍等片刻。

  • Merge 中的 dot 模式在 TensorFlow 中不起作用。
  • RNN 中的掩码在 TensorFlow 中不起作用 [2016 年 1 月更新:现在可以正常使用了。]
  • 在 TensorFlow 中使用 RNN 时,您需要显式定义每个序列的时间步长数。

还有一个问题可能需要更多时间来理解和修复:使用 Theano 保存的卷积模型的权重无法在 TensorFlow 中成功加载,反之亦然。我们目前正在调查此事。

立即试用

要使用 TensorFlow 后端,只需更新 Keras,然后查看 这些说明