如何在 Keras 中创建模型?
在本文中,我们将学习如何在 Keras 中创建模型。
简介
Keras 是一个 Python 开源库,它提供构建人工神经网络模型的 API,具有极大的灵活性。Keras 中的建模可以使用函数式 API 或 Keras 顺序模型来完成。Keras 模块也可在流行的 TensorFlow 库中使用。
最新版本和安装
截至撰写本文时,Keras 的最新版本为 2.1.0。
可以使用 pip 从 PyPI 仓库安装 Keras。
Keras 用于建模的优势
由于 Keras 提供了简单的 API,因此它可以快速实现。
Keras 灵活且健壮,为构建模型提供了简单和高级的工作流程。
提供行业级的 API 用于构建健壮的模型。
也可用于快速原型设计和研究工作。
Keras 模型有两种类型
1. Keras 顺序模型
顾名思义,Keras 顺序模型允许我们以顺序方式逐层构建模型。
这有助于创建仅限于单个输入和输出的模型。它用于构建简单的层。
示例代码片段,展示 Keras 顺序模型的用法。
from keras.models import Sequential from keras.layers import Dense model=Sequential() model.add(Dense(128,input_shape=(8,))) model.add(Dense(64)) model.add(Dense(32))
2. Keras 函数式 API
Keras 函数式 API 在创建模型方面提供了更大的灵活性。它可以帮助我们创建具有多个输入和输出的模型。层可以像在图中一样被添加和共享。
Keras 函数式 API 可以用作蓝图,图和节点可以在需要的地方使用。
Keras 函数式 API 示例 –
from keras.layers import Input, Dense,Concatenate from keras.models import Model import numpy as np # This returns a tensor inputs = Input(shape=(784,)) # a layer instance is callable on a tensor, and returns a tensor x = Dense(64, activation='relu')(inputs) x = Dense(64, activation='relu')(x) predictions = Dense(10, activation='softmax')(x) # This creates a model that includes # the Input layer and three Dense layers model = Model(inputs=inputs, outputs=predictions) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) print(model.summary()) # Keras with muliple inputs input1 = Input(shape=(32,)) input2 = Input(shape=(64,)) x = Concatenate(axis=1)([input1, input2]) output = Dense(10, activation='softmax')(x) model10 = Model([input1, input2],output) print(model10.summary())
使用 TensorFlow API 的 Keras [函数式 API]
Keras 在 TensorFlow 中作为 tf.keras API 提供。函数式 API 主要围绕构建层的定向无环图 (DAG) 而构建。它是一个层图。
使用 tensorflow keras 和 mnist 模型的示例
import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers inputs = keras.Input(shape=(784,)) image_inputs = keras.Input(shape=(32, 32, 3)) dense_layer = layers.Dense(64, activation="relu") x = dense_layer(inputs) x = layers.Dense(64, activation="relu")(x) outputs = layers.Dense(10)(x) model = keras.Model(inputs=inputs, outputs=outputs, name="mnist") #TRAINING AND INFERENCE (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data() x_train = x_train.reshape(60000, 784).astype("float32") / 255 x_test = x_test.reshape(10000, 784).astype("float32") / 255 model.compile( loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True), optimizer=keras.optimizers.RMSprop(), metrics=["accuracy"], ) history = model.fit(x_train, y_train, batch_size=32, epochs=10, validation_split=0.3) test_scores = model.evaluate(x_test, y_test, verbose=2) print("Test loss:", test_scores[0]) print("Test accuracy:", test_scores[1])
函数式 API 的优势
在函数式 API 中,输入形状和数据类型使用 Input 预先创建。API 将对输入和数据类型的传递规范进行内部检查,并提出有用的建议。
可以绘制图形,我们可以在图形中访问中间节点。例如
features_list = [layer.output for layer in vgg19.layers] feat_extraction_model = keras.Model(inputs=vgg19.input, outputs=features_list)
函数式 API 是可序列化的,可以作为单个文件存储,因为它是一个数据结构。
函数式 API 的缺点
由于函数式 API 将网络视为有向无环图,因此不支持动态架构。
结论
Keras 是一个强大的深度学习模型实现工具/库,由于其简单性和健壮性,它既适用于工业也适用于原型设计。顺序 API 有助于构建快速模型,而当需要更多控制时,函数式 API 就能派上用场。