本文介绍深度学习框架Keras,它的重要特征和优势,后端引擎,以及使用keras的流程。
Keras
1. Keras 简介Keras 是一个 Python 深度学习框架, 以 TensorFlow, CNTK, 或者 Theano 作为后端运行, 用于构建和训练深度学习模型的高阶 API, 它可用于快速设计原型、高级研究和生产。
1.1. Keras 具有以下重要特性相同的代码可以在 CPU 或 GPU 上无缝切换运行。具有用户友好的 API,便于快速开发深度学习模型的原型。内置支持卷积网络(用于计算机视觉)、循环网络(用于序列处理)以及二者的任意组合。支持任意网络架构:多输入或多输出模型、层共享、模型共享等。能够构建任意深度学习模型。1.2. 三个主要优势Keras允许简单而快速的原型设计(由于用户友好,高度模块化,可扩展性), 具有以下三个主要优势:
方便用户使用: Keras 具有针对常见用例做出优化的简单而一致的API。它可针对用户错误提供切实可行的清晰反馈。模块化和可组合: 将可配置的构造块连接在一起就可以构建 Keras 模型,并且几乎不受限制。易于扩展: 可以编写自定义构造块以表达新的研究创意,并且可以创建新层、损失函数并开发先进的模型。2. Keras后端引擎Keras 是一个模型级的库,为开发深度学习模型提供了高层次的构建模块。 它不处理张量操作、求微分等低层次的运算。 相反,它依赖于一个专门的、高度优化的张量库来完成这些运算, 这个张量库就是 Keras 的后端引擎。
tensorflow和Keras
2.1. Keras 的三个后端引擎:TensorFlow、Theano 和 CNTKKeras 支持多个后端引擎,不会将你锁定到一个生态系统中。 Keras 是以模块化的方式处理这个问题, 几个不同的后端引擎都可以无缝嵌入到 Keras 中。
目前,Keras 有三个后端实现:
TensorFlow 由 Google 开发;CNTK(软认知工具包Microsoft cognitive toolkit) 由微软开发;Theano 由蒙特利尔大学的 MILA 实验室开发。未来 Keras 可能会扩展到支持更多的深度学习引擎。
Keras 后端引擎
你用 Keras 写的每一段代码都可以在这三个后端上运行,无须任何修改,无缝切换。 我们推荐使用 TensorFlow 后端作为大部分深度学习任务的默认后端, 因为它的应用最广泛,可扩展,而且可用于生产环境。 tensorflow 中已经自带 Keras,只需要导入tf.keras即可使用。
Keras 可以在 CPU 和 GPU 上无缝运行,
在 CPU 上运行 时,TensorFlow 本身封装了一个低层次的张量运算库,叫作 Eigen;在 GPU 上运行时,TensorFlow 封装了一个高度优化的深度学习运算库,叫作 NVIDIA CUDA 深度神经网络库(cuDNN)2.2. tf.kerastf.keras 是 TensorFlow 对 Keras API 规范的实现。 这是一个用于构建和训练模型的高阶 API, 包含对 TensorFlow 特定功能(例如 Eager Execution、tf.data 管道和 Estimator)的顶级支持。 tf.keras 使 TensorFlow 更易于使用,并且不会牺牲灵活性和性能。
TensorFlow
tf.keras 可以运行任何与 Keras 兼容的代码,但请注意:
最新版 TensorFlow 中的 tf.keras 版本可能与 PyPI 中的最新 keras** 版本不同**。请查看 tf.keras.version。保存模型的权重时,tf.keras 默认采用检查点格式。请传递 save_format='h5' 以使用 HDF5查看版本:
import tensorflow as tfprint(tf.VERSION)print(tf.keras.__version__)3. 使用 Keras 开发流程3.1. 典型的 Keras 工作流程(1) 定义训练数据:输入张量和目标张量。(2) 定义层组成的网络(或模型),将输入映射到目标。(3) 配置学习过程:选择损失函数、优化器和需要监控的指标。(4) 调用模型的fit方法在训练数据上进行迭代。接下来我们要培养可靠的直觉:
哪种类型的网络架构适合解决哪种类型的问题?如何选择正确的学习配置?如何调节模型使其给出你想要的结果?3.2. 定义模型有两种方法:一种是使用 Sequential 类,仅用于层的线性堆叠,这是目前最常见的网络架构。利用 Sequential 类定义的两层模型
from tensorflow.keras import models from tensorflow.keras import layersmodel = models.Sequential()model.add(layers.Dense(32, activation='relu', input_shape=(784,))) model.add(layers.Dense(10, activation='softmax'))另一种是函数式 API,用于层组成的有向无环图,让你可以构建任意形式的架构。用函数式 API 定义的相同模型
input_tensor = layers.Input(shape=(784,))x = layers.Dense(32, activation='relu')(input_tensor)output_tensor = layers.Dense(10, activation='softmax')(x)model = models.Model(inputs=input_tensor, outputs=output_tensor)利用函数式 API,你可以操纵模型处理的数据张量, 并将层应用于这个张量,就好像这些层是函数一样
3.3. 配置学习过程定义模型不管使用 Sequential 模型还是函数式 API , 接下来的步骤都是相同的。
配置学习过程是在编译这一步, 你需要指定模型使用的优化器和损失函数,以及训练过程中想要监控的指标。
下面是单一损失函数的例子:
from tensorflow.keras import optimizersmodel.compile(optimizer=optimizers.RMSprop(lr=0.001), loss='mse',metrics=['accuracy'])3.4. 学习过程(训练)学习过程就是通过 fit() 方法将输入数据的 Numpy 数组和对应的目标数据传入模型, 这一做法与 Scikit-Learn 及其他机器学习库类似。
model.fit(input_tensor, target_tensor, batch_size=128, epochs=10)4. 总结Keras 是一个用于构建和训练深度学习模型的高阶 API,Keras允许简单而快速的原型设计(由于用户友好,高度模块化,可扩展性),我们推荐使用 TensorFlow 后端作为大部分深度学习任务的默认后端,tf.keras 是 TensorFlow 对 Keras API 规范的实现。Keras 工作流程:定义训练数据、定义模型、配置学习过程、调用fit方法训练5. 参考文献:详细见“马上学123”: