创建深度学习模型

我们的神经网络模型将由线性堆叠的层组成。为了定义这样的模型,我们调用 Sequential 函数 −

model = Sequential()

输入层

我们使用以下程序语句 −

定义输入层,它是我们网络中的第一层
model.add(Dense(512, input_shape=(784,)))

这将创建一个具有 512 个节点(神经元)的层,其中有 784 个输入节点。下图中显示了这一点 −

输入层

请注意,所有输入节点都完全连接到第 1 层,即每个输入节点都连接到第 1 层的所有 512 个节点。

接下来,我们需要为第 1 层的输出添加激活函数。我们将使用 ReLU 作为激活函数。使用以下程序语句添加激活函数 −

model.add(Activation('relu'))

接下来,我们使用以下语句添加 20% 的 Dropout。 Dropout 是一种用于防止模型过度拟合的技术。

model.add(Dropout(0.2))

此时,我们的输入层已完全定义。接下来,我们将添加一个隐藏层。

隐藏层

我们的隐藏层将由 512 个节点组成。隐藏层的输入来自我们之前定义的输入层。所有节点都与之前的情况一样完全连接。隐藏层的输出将进入网络中的下一层,这将是我们的最终输出层。我们将使用与上一层相同的 ReLU 激活和 20% 的 dropout。添加此层的代码在此处给出 −

model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))

此阶段的网络可以可视化如下 −

输入层

接下来,我们将向网络添加最后一层,即输出层。请注意,您可以使用类似于此处使用的代码添加任意数量的隐藏层。添加更多层会使网络训练变得复杂;然而,在许多情况下(尽管不是全部)都具有更好的结果的明显优势。

输出层

输出层仅由 10 个节点组成,因为我们想要将给定的图像分类为 10 个不同的数字。我们使用以下语句 − 添加此层

model.add(Dense(10))

由于我们想要将输出分类为 10 个不同的单元,因此我们使用 softmax 激活。在 ReLU 的情况下,输出是二进制的。我们使用以下语句添加激活 −

model.add(Activation('softmax'))

此时,我们的网络可以如下图所示可视化 −

Output Layer

此时,我们的网络模型已在软件中完全定义。运行代码单元,如果没有错误,您将在屏幕上收到一条确认消息,如下面的屏幕截图所示 −

network model

接下来,我们需要编译模型。