引言

Keras是一个用于构建和训练深度学习模型的高级API, 后端计算主要使用TensorFlow或者Theano, 由于Theano已停止开发新功能转入维护阶段, 而且目前最新版的TensorFlow已经包含了Keras模块, 所以本教程采用基于TensorFlow的Keras进行讲解, TensorFlow版本1.4.1。Keras主要用于快速原型设计,高级研究和生产中,具有三个主要优势:

  • 用户友好的

Keras提供一致而简洁的API, 能够极大减少一般应用下用户的工作量,同时,Keras提供清晰和具有实践意义的bug反馈。

  • 模块化和可组合的

Keras模型是通过将可配置的模块连接在一起而制定的,几乎没有限制。

  • 易于扩展

很容易编写自定义模块以表达研究的新想法。创建新图层,损失函数并开发最先进的模型。

导入tf.keras

tf.keras是TensorFlow实现的 Keras API规范。这是一个用于构建和训练模型的高级API,其中包括对TensorFlow特定功能的一流支持,例如急切执行, tf.data pipeline和estimators。 tf.keras使TensorFlow更易于使用而不牺牲灵活性和性能。

要开始使用tf.keras, 请将其作为TensorFlow程序的一部分导入:

import tensorflow as tf

from tensorflow import keras

tf.keras 可以运行任何与Keras兼容的代码,但请记住:

  • 在TensorFlow中的tf.keras最新版本可能与PyPI版本的最新的Keras版本不一样, 可以通过运行tf.keras.version来检查.
  • 当保存模型的权重,tf.keras默认为CheckPoint的格式。可以通过在代码中设置save_format='h5'使用HDF5。

构建一个简单的模型

顺序模型

在Keras中,您可以组装网络层来构建模型。模型通常是一个网络层构成的图。最常见的模型类型是一个叫做序贯模型的叠加层:tf.keras.Sequential模型。

构建一个简单的全连接的网络(即多层感知器):

model = keras.models.Sequential()

# 添加一个含有64个神经网络单元的全连接层到模型中,并且指定输入数据的维度

model.add(keras.layers.Dense(64, activation='relu',input_shape=(64,)))

# 添加另外一个

model.add(keras.layers.Dense(64, activation='relu'))

# 添加一个具有10个输出单元且使用softmax为激活函数的全连接层

model.add(keras.layers.Dense(10, activation='softmax'))

通过上面的代码一个具有一个输入层,一个隐藏层,一个输出层的神经网络模型就构建好了.

配置网络层

除了上面的示例外, tf.keras.layers.Dense层还可以使用很多的参数, 主要的功能如下:

  • activation:设置网络层的激活函数。此参数由内置函数的名称或可调用对象指定。默认情况下,不应用任何激活。
  • kernel_initializer和bias_initializer:创建网络层时内核或者偏差权重的初始化方案。此参数是名称或可调用对象。这里默认为"Glorot uniform"初始化方案。
  • kernel_regularizer和bias_regularizer:设置应用于网络层中内核或者偏差权重的正则化方案,例如L1或L2正则化。默认情况下,不应用正则化。

以下是tf.keras.layers.Dense使用构造函数参数实例化网络层:

# 创建一个使用sigmoid为激活函数的layer

layers.Dense(64, activation='sigmoid')

# 也可以这样创建,效果一样

layers.Dense(64, activation=tf.sigmoid)

# 一个kernel矩阵使用正则化因子为0.01的L1正则项的全连接层

layers.Dense(64, kernel_regularizer=keras.regularizers.l1(0.01))

# 一个偏差向量使用正则化因子为0.01的L2正则项的全连接层

layers.Dense(64, bias_regularizer=keras.regularizers.l2(0.01))

# 一个使用随机正交矩阵初始化Kernel的全连接层

layers.Dense(64, kernel_initializer='orthogonal')

# 一个偏差初始化时全为2的全连接层

layers.Dense(64, bias_initializer=keras.initializers.constant(2.0))

在上面的内容中,我们使用了几行代码就建立了一个神经网络模型,由此可见Keras真的是非常简单易用,方便上手, 下一期文章中我们将讲解在Keras中怎么输入数据与训练搭建好的神经网络