Keras 简介
Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。 ————Keras官方定义
简单来说,Keras 是一个独立的、机器学习的高级 API ;而且在 TensorFlow2.0 发布之时被包含进了 TensorFlow ,因此我们可以在 TensorFlow2.0 及其以后的版本中直接使用 Keras 。
1. Keras 是什么以及它的由来
Keras 的前身是 François Chollet 为 ONEIROS 项目所的编写的代码,在 2015 年开源成为神经网络的开发工具。Keras 最初参考了 Torch 的风格并且完全由 Python 编写。
Keras 从创建之初到后来被 TensorFlow 所支持,经历了很多的变化,具体变化如下:
- Keras 最初在 2015 年被开源发布,从诞生之初就被设计成为一个机器学习的高级 API;
- Keras 在 2016 年发布了第一个正式版本 1.0.0,意味着进入稳定版本阶段;
- 2017 年 Keras 发布了 2.0.0 版本并被整合进 TensorFlow;
- 2018 年在 TensorFlow2.0 公开后便被正式确立为 tf.keras 高阶 API;
- 直到如今,使用 tf.keras 依然是使用 TensorFlow 构建模型的最快捷方式。
也就是说 Keras 并不是一个单独的框架,他只是一个高级的 API 库;利用它简易和快速的原型设计,我们可以根据其 API 实现高级网络的构建。进而使用 TensorFlow 进行训练等进一步的工作。
而在本课程之中我们所提到的 Keras 都是指的是 TensorFlow 中的 Keras 模块。
2. tf.Keras 与 TesnorFlow 结合的优势
说到 Keras 与 TensorFlow1.x 的结合,就不得不说一下 Keras 的特点:
- Keras 基于 Python 发展而来,因此它的使用符合 Python 开发者的使用习惯
- Keras 提供的 API 较为高阶,我们可以不用关心底层的实现的一些细节
- Keras 拥有友好、全面的文档,我们可以轻松地进行学习
- 便于使用,得益于高阶 API ,我们可以轻松地实现模型的构建与训练
- 扩展性好,我们可以使用 TensorFlow 来扩展 Keras ,从而实现更加定制化的需求
而 TensorFlow 最大的特点就在于快速、快捷,我们能够以很高的性能实现一些模型的训练工作。
自 2017 年开始,Keras 的大部分组件被整合至 Tensorflow 的 Python API中,但是却没有作为高阶 API(tf.keras)整合进 TensorFlow 之中。因此大多数工作人员依然采用的是独立安装的 Kears 进行高层模型的构建,而使用 TensorFlow 作为底层框架进行训练。
在 TensorFlow2.x 之中,我们便可以在 TensorFlow 之中使用 Keras ,从而将两者的优势互相结合,一方面我们可以快速的构建模型,另外一方面我们也可以进行模型的快速训练。
3. 函数式 API 编程
说到 Keras,就不得不说一下 TensorFlow2.0 引入的函数式 API 编程。也就是 Eager Execution。
所谓函数式 API 编程,通俗来讲就是我们每一个语句都是通过函数的调用来实现的,而这也意味着我们可以摒弃掉某一条语句的下文而单独执行。
这似乎很符合我们的编程的习惯,但是在 TensorFlow1.x 之中,并不默认支持 Eager Execution 。通常来讲我们在 TensorFlow1.x 之中我们需要首先创建一个 Session,然后才能运行程序。
而随着 Keras 的引入,TesnorFlow 开始支持 Eager Execution,也就是说我们可以完全采用函数调用的方式来进行机器学习的开发。这无疑大大降低了开发的门槛,也可以帮助我们更加快捷、方便地进行模型的相应的工作。
我们可以来看一下具体代码的区别,在 TensorFlow1.x 之中,我们在训练的过程之中一般采用如下的方式进行训练:
with tf.Session() as session:
session.run(tf.global_variables_initializer())
session.run(tf.tables_initializer())
model.fit(X_train, y_train, validation_data=(X_valid, y_valid), epochs=10, batch_size=64)
可以看到,我们首先需要创建一个会话(tf.session),然后才能在其中进行模型的训练操作。
而在 TensorFlow2.x 之中,我们只需要如下代码就可以实现模型的训练:
model.fit(X_train, y_train, validation_data=(X_valid, y_valid), epochs=10, batch_size=64)
相信通过代码的比对大家就可以轻松地看出 Eager Execution 的优势:
- 程序流程明了,符合大多数Python工作者的编码习惯;
- 代码简单,方便运行时调试;
- Eager Execution 提供了更加简洁明了的接口,而避免了 session 复杂易错的接口。
而在以后的学习与开发之中,我们都会通过 Eager Execution 模式来进行。
4. 小结
TensorFlow 中的 Keras 模块为一个新的、易用、快捷的模块,我们可以依靠 Keras 模块来快速地构建网络。同时它也拥有着高度的可扩展性,我们可以使用 TensorFlow 对其进行轻松的扩展;从而大大提升我们的开发效率。