11 Keras框架从零教程:构建模型之功能API
在上一篇文章中,我们介绍了Keras框架中Sequential
模型的构建方式,这是最基础和线性的模型构建方法。本篇文章将深入探讨Keras的功能API(Functional API),这是一种更加灵活和强大的构建模型方法,适用于复杂的模型架构,比如多输入多输出的模型、共享层的模型等。
什么是功能API
Keras的功能API允许用户以更加复杂和灵活的方式构建模型。在功能API中,模型的构建是基于“层”的函数调用,这使得我们能够创建非线性结构的模型。这对于深度学习中的一些复杂应用场景尤为重要,如图像分割、图像生成等任务。
功能API的基础构建方式
使用功能API构建模型的基本流程如下:
- 定义输入:使用
Input
层定义输入张量。 - 构建图:将层连接起来以形成模型的计算图。
- 创建模型:通过
Model
类创建模型实例。
下面通过一个简单的例子来演示如何使用功能API。
示例:构建一个简单神经网络
假设我们想构建一个简单的全连接神经网络来进行二分类任务。
from keras.layers import Input, Dense
from keras.models import Model
# 1. 定义输入
inputs = Input(shape=(20,)) # 输入维度为20的张量
# 2. 构建图
x = Dense(64, activation='relu')(inputs) # 添加第一层
x = Dense(64, activation='relu')(x) # 添加第二层
outputs = Dense(1, activation='sigmoid')(x) # 输出层
# 3. 创建模型
model = Model(inputs=inputs, outputs=outputs)
# 汇总模型信息
model.summary()
这里我们定义了一个输入层,接着加入两个隐藏层和一个输出层。最后,通过Model
类来创建一个完整的模型。
复杂模型的构建
使用功能API,不仅可以构建简单的模型,还能够轻松实现具有复杂结构的模型。例如,我们可以构建一个有多个输入和输出的模型。
示例:多输入多输出模型
例如,我们想创建一个模型,接收两个不同的输入并生成两个不同的输出。可以通过以下步骤实现:
from keras.layers import Input, Dense, Concatenate
from keras.models import Model
# 定义输入
input_a = Input(shape=(32,)) # 第一个输入
input_b = Input(shape=(32,)) # 第二个输入
# 第一部分模型
x = Dense(16, activation='relu')(input_a)
# 第二部分模型
y = Dense(16, activation='relu')(input_b)
# 合并两个模型的输出
combined = Concatenate()([x, y])
# 添加最终输出层
z = Dense(1, activation='sigmoid')(combined)
# 创建模型
model = Model(inputs=[input_a, input_b], outputs=z)
# 汇总模型信息
model.summary()
在这个示例中,我们定义了两个输入,分别通过独立的神经网络层处理,然后将它们的输出合并,最终得到一个输出层。
共享层的模型
功能API还可以实现层的共享,这对于需要在多个输入间共享权重的场合非常有用。
示例:共享层
# 定义共享层
shared_layer = Dense(64, activation='relu')
# 定义输入
input_1 = Input(shape=(10,))
input_2 = Input(shape=(10,))
# 使用共享层
output_1 = shared_layer(input_1)
output_2 = shared_layer(input_2)
# 添加输出层
output_1 = Dense(1, activation='sigmoid')(output_1)
output_2 = Dense(1, activation='sigmoid')(output_2)
# 创建模型
model = Model(inputs=[input_1, input_2], outputs=[output_1, output_2])
# 汇总模型信息
model.summary()
在这个示例中,shared_layer
被应用到两个不同的输入中。这样,在训练时,两个输入共享该层的权重。
总结
在本篇文章中,我们探讨了Keras的功能API,学习了如何以更加灵活的方式构建复杂模型。从简单的全连接网络,到具备多个输入输出的复杂模型,功能API为我们提供了强大的工具来实现多种需求。以下篇文章中,我们将重点关注如何建立自定义模型,以进一步扩展我们的模型构建能力。