Keras - 模型
如前所述,Keras 模型代表实际的神经网络模型。Keras 提供了两种模式来创建模型,简单易用的 Sequential API 以及更灵活、更高级的 Functional API。现在让我们在本章中学习如何使用 Sequential 和 Functional API 创建模型。
Sequential
Sequential API 的核心思想只是按顺序排列 Keras 层,因此它被称为 Sequential API。大多数 ANN 也具有按顺序排列的层,数据按给定顺序从一层流向另一层,直到数据最终到达输出层。
只需调用下面指定的 Sequential() API 即可创建 ANN 模型 −
from keras.models import Sequential model = Sequential()
添加层
要添加层,只需使用 Keras 层 API 创建一个层,然后通过下面指定的 add() 函数传递该层 −
from keras.models import Sequential model = Sequential() input_layer = Dense(32, input_shape=(8,)) model.add(input_layer) hidden_layer = Dense(64, activation='relu'); model.add(hidden_layer) output_layer = Dense(8) model.add(output_layer)
在这里,我们创建了一个输入层、一个隐藏层和一个输出层。
访问模型
Keras 提供了几种方法来获取模型信息,如层、输入数据和输出数据。它们如下 −
model.layers − 以列表形式返回模型的所有层。
>>> layers = model.layers >>> layers [ <keras.layers.core.Dense object at 0x000002C8C888B8D0>, <keras.layers.core.Dense object at 0x000002C8C888B7B8> <keras.layers.core.Dense object at 0x 000002C8C888B898> ]
model.inputs − 以列表形式返回模型的所有输入张量。
>>> inputs = model.inputs >>> inputs [<tf.Tensor 'dense_13_input:0' shape=(?, 8) dtype=float32>]
model.outputs − 以列表形式返回模型的所有输出张量。
>>> outputs = model.outputs >>> outputs <tf.Tensor 'dense_15/BiasAdd:0' shape=(?, 8) dtype=float32>]
model.get_weights − 将所有权重作为 NumPy 数组返回。
model.set_weights(weight_numpy_array) − 设置模型的权重。
序列化模型
Keras 提供了将模型序列化为对象以及 json 并在稍后再次加载的方法。它们如下 −
get_config() − I将模型作为对象返回。
config = model.get_config()
from_config() − 它接受模型配置对象作为参数并相应地创建模型。
new_model = Sequential.from_config(config)
to_json() − 将模型作为 json 对象返回。
>>> json_string = model.to_json()
>>> json_string '{"class_name": "Sequential", "config":
{"name": "sequential_10", "layers":
[{"class_name": "Dense", "config":
{"name": "dense_13", "trainable": true, "batch_input_shape":
[null, 8], "dtype": "float32", "units": 32, "activation": "linear",
"use_bias": true, "kernel_initializer":
{"class_name": "Vari anceScaling", "config":
{"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}},
"bias_initializer": {"class_name": "Zeros", "conf
ig": {}}, "kernel_regularizer": null, "bias_regularizer": null,
"activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}},
{" class_name": "Dense", "config": {"name": "dense_14", "trainable": true,
"dtype": "float32", "units": 64, "activation": "relu", "use_bias": true,
"kern el_initializer": {"class_name": "VarianceScaling", "config":
{"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}},
"bias_initia lizer": {"class_name": "Zeros",
"config": {}}, "kernel_regularizer": null, "bias_regularizer": null,
"activity_regularizer": null, "kernel_constraint" : null, "bias_constraint": null}},
{"class_name": "Dense", "config": {"name": "dense_15", "trainable": true,
"dtype": "float32", "units": 8, "activation": "linear", "use_bias": true,
"kernel_initializer": {"class_name": "VarianceScaling", "config":
{"scale": 1.0, "mode": "fan_avg", "distribution": " uniform", "seed": null}},
"bias_initializer": {"class_name": "Zeros", "config": {}},
"kernel_regularizer": null, "bias_regularizer": null, "activity_r egularizer":
null, "kernel_constraint": null, "bias_constraint":
null}}]}, "keras_version": "2.2.5", "backend": "tensorflow"}'
>>>
model_from_json() − 接受模型的 json 表示并创建一个新模型。
from keras.models import model_from_json new_model = model_from_json(json_string)
to_yaml() − 将模型作为 yaml 字符串返回。
>>> yaml_string = model.to_yaml()
>>> yaml_string 'backend: tensorflow
class_name:
Sequential
config:
layers:
- class_name: Dense
config:
activation: linear
activity_regular izer: null
batch_input_shape:
!!python/tuple
- null
- 8
bias_constraint: null
bias_initializer:
class_name : Zeros
config: {}
bias_regularizer: null
dtype:
float32
kernel_constraint: null
kernel_initializer:
cla ss_name: VarianceScaling
config:
distribution: uniform
mode: fan_avg
scale: 1.0
seed: null
kernel_regularizer: null
name: dense_13
trainable: true
units: 32
use_bias: true
- class_name: Dense
config:
activation: relu
activity_regularizer: null
bias_constraint: null
bias_initializer:
class_name: Zeros
config : {}
bias_regularizer: null
dtype: float32
kernel_constraint: null
kernel_initializer:
class_name: VarianceScalin g
config:
distribution: uniform
mode: fan_avg
scale: 1.0
seed: null
kernel_regularizer: nu ll
name: dense_14
trainable: true
units: 64
use_bias: true
- class_name: Dense
config:
activation: linear
activity_regularizer: null
bias_constraint: null
bias_initializer:
class_name: Zeros
config: {}
bias_regu larizer: null
dtype: float32
kernel_constraint: null
kernel_initializer:
class_name: VarianceScaling
config:
distribution: uniform
mode: fan_avg
scale: 1.0
seed: null
kernel_regularizer: null
name: dense _15
trainable: true
units: 8
use_bias: true
name: sequential_10
keras_version: 2.2.5
'
>>>
model_from_yaml() − 接受模型的 yaml 表示并创建新模型。
from keras.models import model_from_yaml new_model = model_from_yaml(yaml_string)
总结模型
理解模型是正确使用它进行训练和预测的重要阶段。Keras 提供了一种简单的方法 summary 来获取有关模型及其层的完整信息。
上一节中创建的模型的总结如下 −
>>> model.summary() Model: "sequential_10" _________________________________________________________________ Layer (type) Output Shape Param #================================================================ dense_13 (Dense) (None, 32) 288 _________________________________________________________________ dense_14 (Dense) (None, 64) 2112 _________________________________________________________________ dense_15 (Dense) (None, 8) 520 ================================================================= Total params: 2,920 Trainable params: 2,920 Non-trainable params: 0 _________________________________________________________________ >>>
训练和预测模型
模型提供训练、评估和预测过程的函数。它们如下 −
compile − 配置模型的学习过程
fit − 使用训练数据训练模型
evaluate − 使用测试数据评估模型
predict − 预测新输入的结果。
Functional API
顺序 API 用于逐层创建模型。Functional API 是创建更复杂模型的替代方法。Functional 模型,您可以定义共享层的多个输入或输出。首先,我们为模型创建一个实例并连接到各层以访问模型的输入和输出。本节简要介绍功能模型。
创建模型
使用以下模块导入输入层 −
>>> from keras.layers import Input
现在,使用以下代码为模型创建一个指定输入维度形状的输入层 −
>>> data = Input(shape=(2,3))
使用以下模块定义输入层 −
>>> from keras.layers import Dense
使用以下代码行 − 为输入添加 Dense 层
>>> layer = Dense(2)(data)
>>> print(layer)
Tensor("dense_1/add:0", shape =(?, 2, 2), dtype = float32)
使用以下模块 − 定义模型
from keras.models import Model
通过指定输入和输出层以函数方式创建模型 −
model = Model(inputs = data, output = layer)
创建简单模型的完整代码如下所示 −
from keras.layers import Input from keras.models import Model from keras.layers import Dense data = Input(shape=(2,3)) layer = Dense(2)(data) model = Model(inputs=data,outputs=layer) model.summary() _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= input_2 (InputLayer) (None, 2, 3) 0 _________________________________________________________________ dense_2 (Dense) (None, 2, 2) 8 ================================================================= Total params: 8 Trainable params: 8 Non-trainable params: 0 _________________________________________________________________

