Keras提供了简洁易懂的方式来定义神经网络的结构。对于许多标准的深度学习任务,网络由直接的序列层组成,其中一个层的输出直接作为下一个层的输入。对于这类常见情形,Keras提供了Sequential API,一种简单而优雅地逐层构建模型的方法。可以将Sequential模型想象成线性堆叠的煎饼。您将层逐一堆叠起来,数据按照它们被添加的顺序流经各层。由于其简洁性,它是Keras中开始构建模型最常用的方法。创建顺序模型创建Sequential模型主要有两种方式:向构造函数传递层列表: 当您预先知道整个架构时,这通常是最简洁的方法。使用.add()方法: 这使您能够逐步添加层,在编程构建模型或进行试验时非常有用。我们来看看这两种方法的实际应用。首先,请确保导入必要的组件:# 导入Sequential模型类型 from keras.models import Sequential # 导入Dense层类型(全连接) from keras.layers import Dense方法一:层列表您可以直接将层实例列表传递给Sequential构造函数来定义您的模型:# 定义一个包含两个Dense层的模型 model = Sequential([ Dense(units=64, activation='relu', input_shape=(784,)), # 第一层需要input_shape Dense(units=10, activation='softmax') # 输出层 ]) # 打印模型层和参数的摘要 model.summary()方法二:使用.add()或者,您可以实例化一个空的Sequential模型,并使用.add()方法逐一添加层:# 创建一个空的Sequential模型 model = Sequential() # 添加第一层(指定输入形状) model.add(Dense(units=64, activation='relu', input_shape=(784,))) # 添加第二层(输出层) model.add(Dense(units=10, activation='softmax')) # 打印摘要 model.summary()这两种方法都会得到完全相同的模型架构。选择哪种通常取决于个人偏好或编码风格。基于列表的方法更紧凑,而.add()方法对于复杂的序列或有条件添加层的情况可能更易读。指定输入形状请注意,两个示例中第一个 Dense层都有input_shape=(784,)参数。这很重要。Keras需要知道模型应预期输入的形状,以便为第一层创建必要的权重。为什么只在第一层? 一旦定义了第一层并知道了其输入形状,Keras就能自动推断所有后续层的输入形状。层 $N$ 的输出形状会成为层 $N+1$ 的输入形状。(784,)是什么意思? 这表示模型预期输入样本,其中每个样本是包含784个特征的向量。这是展平的MNIST图像(28x28像素 = 784)的常见形状。如果您处理的是包含10个特征的表格数据,您可以使用input_shape=(10,)。对于未展平的图像数据,您可能会使用(高度, 宽度, 通道)等形状,例如(28, 28, 1)。您只需为添加到Sequential模型中的第一个层指定输入形状。数据线性流的可视化Sequential模型强制执行简单、线性的数据流:digraph G { rankdir=LR; node [shape=box, style=filled, fillcolor="#a5d8ff"]; Input [label="输入数据 (形状=(784,))", shape=cds, fillcolor="#ced4da"]; Layer1 [label="Dense(64, 激活函数='relu')"]; Layer2 [label="Dense(10, 激活函数='softmax')"]; Output [label="输出预测 (形状=(10,))", shape=cds, fillcolor="#ced4da"]; Input -> Layer1; Layer1 -> Layer2; Layer2 -> Output; }此图表说明了数据如何通过一个包含两个Dense层的简单Sequential模型进行线性流动。输入数据依次经过第1层和第2层,生成最终输出。不使用顺序模型的情形尽管Sequential API对许多任务都很有用,但它也有局限性。它严格设计用于每个层只有一个输入张量和一个输出张量,且这些层线性排列的模型。您不能使用Sequential API来构建以下模型:有多个输入或多个输出的模型。共享层(在图中多次使用同一个层实例)的模型。有非线性连接,例如残差连接或分支的模型。对于这些更复杂的架构,Keras提供了函数式API,我们将在后面的章节中介绍。目前,Sequential API提供了一种简洁明了的方式,让您开始构建许多常见类型的神经网络,例如简单的前馈分类器和回归器。在接下来的章节中,我们将更仔细地查看这些示例中使用的Dense层和激活函数。