11 构建模型之功能API

在上一篇文章中,我们介绍了Keras框架中Sequential模型的构建方式,这是最基础和线性的模型构建方法。本篇文章将深入探讨Keras的功能API(Functional API),这是一种更加灵活和强大的构建模型方法,适用于复杂的模型架构,比如多输入多输出的模型、共享层的模型等。

什么是功能API

Keras的功能API允许用户以更加复杂和灵活的方式构建模型。在功能API中,模型的构建是基于“层”的函数调用,这使得我们能够创建非线性结构的模型。这对于深度学习中的一些复杂应用场景尤为重要,如图像分割、图像生成等任务。

功能API的基础构建方式

使用功能API构建模型的基本流程如下:

  1. 定义输入:使用Input层定义输入张量。
  2. 构建图:将层连接起来以形成模型的计算图。
  3. 创建模型:通过Model类创建模型实例。

下面通过一个简单的例子来演示如何使用功能API。

示例:构建一个简单神经网络

假设我们想构建一个简单的全连接神经网络来进行二分类任务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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,不仅可以构建简单的模型,还能够轻松实现具有复杂结构的模型。例如,我们可以构建一个有多个输入和输出的模型。

示例:多输入多输出模型

例如,我们想创建一个模型,接收两个不同的输入并生成两个不同的输出。可以通过以下步骤实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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还可以实现层的共享,这对于需要在多个输入间共享权重的场合非常有用。

示例:共享层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 定义共享层
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为我们提供了强大的工具来实现多种需求。以下篇文章中,我们将重点关注如何建立自定义模型,以进一步扩展我们的模型构建能力。

11 构建模型之功能API

https://zglg.work/keras-zero/11/

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论