TensorFlow 作为深度学习框架,当然是为了帮助我们更便捷地构建神经网络。所以,本次实验将会了解如何使用 TensorFlow 来构建神经网络,并学会 TensorFlow 构建神经网络的重要函数和方法。
知识点
- Keras 顺序模型
- Keras 函数模型
- Keras 模型存储及推理
- Estimator 高阶 API
Keras 本来是一个用 Python 编写的独立高阶神经网络 API,它能够以 TensorFlow,CNTK,或者 Theano 作为后端运行。目前,TensorFlow 已经吸纳 Keras,并组成了 tf.keras
模块 。官方介绍,tf.keras
和单独安装的 Keras 略有不同,但考虑到未来的发展趋势,实验以学习 tf.keras
为主。
通过查阅官方文档,你可以发现 tf.keras
下又包含 10 多个子模块,而这些子模块下又集成了大量的类和函数。由于 Keras 先前是独立发布的,实际上我们在仅使用 tf.keras
的情况下,就几乎能够满足深度神经网络搭建的全部需求。
下面,我们对 Keras 进行快速上手介绍。Keras 的核心数据结构是 Model,一种组织网络层的方式。其中有两种模式,最简单且最常用的模型是 Sequential 顺序模型,它是由多个网络层线性堆叠的栈。对于更复杂的结构,可以使用 Keras 函数式 API,它允许构建任意的神经网络图。
Keras 顺序模型
使用 Keras 创建一个 Sequential 顺序模型非常简单,只需要 1 行代码 tf.keras.models.Sequential()
就可以搞定。
import tensorflow as tf
model = tf.keras.models.Sequential() # 定义顺序模型
model
当然,上面这行代码肯定还不是一个神经网络模型,只有向其中添加不同结构的神经网络层,才能真正成为一个我们需要的神经网络模型。这里我们选择前面实验已经构建过的简单全连接神经网络。
Keras 中的神经网络层全部位于 tf.keras.layers
下方。这里包含了各自经典神经网络所需的功能层,例如我们这里需要的全连接层 tf.keras.layers.Dense
。
Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
- units: 正整数,输出空间维度。
- activation: 激活函数。若不指定,则不使用激活函数 (即线性激活:
a(x) = x
)。 - use_bias: 布尔值,该层是否使用偏置项量。
- kernel_initializer:
kernel
权值矩阵的初始化器。 - bias_initializer: 偏置项量的初始化器。
- kernel_regularizer: 运用到
kernel
权值矩阵的正则化函数。 - bias_regularizer: 运用到偏置项的正则化函数。
- activity_regularizer: 运用到层的输出的正则化函数。
- kernel_constraint: 运用到
kernel
权值矩阵的约束函数。 - bias_constraint: 运用到偏置项量的约束函数。
Dense 实现操作: output = activation(dot(input, kernel) + bias)
,其中 activation
是按逐个元素计算的激活函数,kernel
是由网络层创建的权值矩阵,以及 bias
是其创建的偏置项 (只在 use_bi