深度学习库 Keras 2 重磅发布,与 TensorFlow 联系更紧密

2018-03-29 14:35:43 浏览数 (1)

昨天,著名深度学习开源库 Keras 通过官方博客正式发布了全新版本:Keras 2。

根据官方介绍,此次更新的重点有两个:

  1. Keras 2 API 将作为 TensorFlow 框架的一部分直接向用户提供支持;
  2. Keras 2 API 经过了重新设计,将成为团队第一个长期支持(long-term-support)的 API。

Keras 表示:从 2015 年 3 月发布第一个版本以来,有数以百计的开发人员对 Keras 的开源代码做了完善和拓展,数以千计的热心用户在社区对 Keras 的发展做出了贡献。目前,有大量的 AI 初创公司在 Keras 的帮助下挂牌成立,大量的研究人员通过 Keras 有效提升了研发效率,大公司的工程师们则通过 Keras 大大简化了他们的工作流程。更为重要的是,通过使用 Keras,更多的从前完全没有机器学习开发经验的用户,从此步入了深度学习的世界。

融入 TensorFlow,成为深度学习的通用语言

在本次版本更新中,最重要的一项内容就是增强了 Keras 与 TensorFlow 的逻辑一致性。按照 Keras 在博客中的说法:“这是将 Keras API 整合到 TensorFlow 核心的一个重要的准备步骤”。

实际上,从 2015 年 12 月的版本开始,Keras 就已经支持用户将 TensorFlow 作为运行后端(runtime backend),但此前,Keras 的 API 与 TensorFlow 的代码库尚处于相互隔离的状态。未来,从 TensorFlow 1.2 版本开始,Keras 2 API 将作为 TensorFlow 框架的一部分直接向用户提供支持,Keras 在博客中表示:“这是 TensorFlow 实现下一个百万用户级目标的关键”。

Keras 在博客中表示,他们更愿意人们将 Keras 视为一种通用的 API 规范,而不仅仅是一个具体的代码库。在这个意义上,他们将此前的 Keras 实现归结为两个大类:

  1. TensorFlow 的内部实现,也就是前不久在 TensorFlow 1.0 版本中发布的 tf.keras 模块,完全基于 TensorFlow 编写,并且与所有 TensorFlow 功能深度兼容;
  2. 通用实现,兼容多种运行后端,包括 Theano 和 TensorFlow 等(将来可能会支持更多其他的后端)。

类似的,知名 Java 深度学习库 Deeplearning4j 目前正在基于 Scala 语言实现 Keras 规范的一部分,即 ScalNet;而为了让 Keras 在浏览器中运行,Keras.js 团队也在基于 JavaScript 实现一部分 Keras API。这样的例子还有很多。

这些例子正符合了 Kera 成为一种通用的 API 规范的发展定位。按照 Keras 在博客中的说法:“Keras API 意在成为一个深度学习实践者的通用语言,一个跨越多种不同的工作流、独立于各种底层平台的深度学习通用语言”。

重新设计,成为第一个长期支持的 API

Keras 2 的另一项重要更新是 API 的变化。Keras 在博客中表示,全新发布的 Keras 2 API 将成为团队第一个长期支持的 API,不但兼容目前最新的软件,而且未来将保持长期有效。为了实现这一点,Keras 重新设计了绝大部分 API,为将来的扩展和更新预留了充足的修改空间。值得一提的是,新设计的 API 完全兼容于谷歌 TensorFlow 规范。

此次 API 更新的要点包括:

  1. 大部分软件层的 API 接口都和从前完全不同,特别是 Dense、BatchNormalization 和所有卷积相关的层。但由于软对设置了兼容接口,因此 Keras 1 的代码不经修改仍然可以在 Keras 2 上运行(但会出现打印警告);
  2. 生成器训练和评估方法相关的 API 也已经改变(包括 fit_generator、predict_generator 和 evaluate_generator 等)。同样,Keras 1 的代码仍然可以运行;
  3. 在 fit 中,nb_epoch 已经被更名为 epochs。而且,这一更改也适用于 API 转换接口;
  4. 许多图层的保存权重格式已更改。同样,以从前的权重保存的文件仍然可以在 Keras 2 中加载;
  5. objectives 模块已经被更名为 losses。

与此前不兼容的地方

由于 Keras 2 是一次重大的版本更新,因此无法避免地要引入一些与此前版本不兼容的地方,特别是对于高级用户而言,这些信息至关重要:

  1. 包括 MaxoutDense、TimeDistributedDense 和 Highway 在内的旧版软件层已经被永久删除;
  2. 许多旧版的指标(metrics)和损失函数(loss functions)被删除;
  3. BatchNormalization 层不再支持 mode 参数;
  4. 由于内核代码已经改变,因此自定义层必须全部更新。不过由于修改相对不大,因此更新应该不会太耗时,更新详情参见: https://keras.io/layers/writing-your-own-keras-layers/
  5. 所有使用未记录的(undocumented) Keras 函数的代码段可能都已经不可用;因此高级用户需要进行一些修改。

目前 Keras 2 已经在 Github 上开源:

https://github.com/fchollet/keras

用户可以通过 PyPI 直接更新:

pip install keras --upgrade

0 人点赞