如何在 Keras 中创建模型?

kerasprogrammingtensorflow

在本文中,我们将学习如何在 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])

Functional API 的优势

  • 在 Functional API 中,输入形状和 dtype 是使用 Input 预先创建的。API 将对输入和 dtype 传递的规范进行内部检查,并提出有用的建议。

  • 可以绘制图形,我们可以访问图形中的中间节点。例如

features_list = [layer.output for layer in vgg19.layers] feat_extraction_model = keras.Model(inputs=vgg19.input, output=features_list)
  • Functional API 是可序列化的,并且可以作为单个文件存储,因为它是一种数据结构。

Functional API 的缺点

  • 不支持动态架构,因为 Functional API 将网络视为有向无环图。

结论

由于 Keras 简单且稳健,因此它是一种强大的工具/库,可用于深度学习模型实现,既可用于工业,也可用于原型设计。尽管 Sequential API 有助于构建快速模型,但在需要更多控制的情况下,Functional API 可以提供帮助。


相关文章