核心层:构建卷积神经网络 (CNN)
卷积神经网络(CNN)在图像识别、计算机视觉等领域取得了巨大成功。它的强大能力源于其独特的网络结构,主要由以下三种核心层“搭建”而成。
卷积层 (Convolutional Layer)
比喻:一群“特征侦探”。每个侦探(称为卷积核或滤波器)都只负责寻找一种特定的微小特征,比如一个侦探找“垂直边缘”,另一个找“圆形轮廓”。它们会地毯式地搜查整张图片,每当找到自己负责的特征时,就在“地图”(称为特征图)上标记出来。
动手试试:
点击“执行一步”,观察 3x3 的卷积核(橙色框)如何在 5x5 的输入图像上滑动,并通过元素相乘再求和的方式,计算出右侧特征图中的一个值。
输入图像
*
卷积核
=
特征图
from tensorflow import keras
from keras import layers
model = keras.Sequential([
# 卷积层
layers.Conv2D(
filters=32, # 32个卷积核
kernel_size=(3, 3),# 卷积核大小
activation='relu',
input_shape=(28, 28, 1)
),
# ... 其他层
])
池化层 (Pooling Layer)
比喻:“信息压缩员”。在侦探们(卷积层)画出详细的特征地图后,池化层会对地图进行“浓缩”,只保留每个小区域内最重要的信息(例如,最大值或平均值)。这不仅能减少计算量,还能让模型对特征的微小位置变化不那么敏感(例如,无论猫的眼睛在图片的左上角还是稍微偏右一点,模型都能认出来)。
动手试试:
点击“执行一步”,观察 2x2 的池化窗口(绿色框)如何在 4x4 的特征图上滑动,并从中提取最大值,生成一个 2x2 的新特征图。
输入特征图
➔
输出特征图
# ... 接在卷积层之后
model.add(
# 最大池化层
layers.MaxPooling2D(pool_size=(2, 2))
)
# ... 其他层
全连接层 (Fully Connected Layer)
比喻:“最终决策者”。在经过多轮的“侦查”(卷积)和“信息压缩”(池化)后,所有高级特征会被“压平”成一个长长的列表,然后送入全连接层。这一层就像一个传统的神经网络,它会综合所有提取到的高级特征,并做出最终的分类或回归决策(例如,“这张图片是猫的概率是95%”)。
特征图
→
压平 (Flatten)
→
全连接层
→
输出
# ... 接在池化层之后
# 首先将多维特征图压平
model.add(layers.Flatten())
# 全连接层
model.add(layers.Dense(units=128, activation='relu'))
# 输出层 (也是一种全连接层)
model.add(layers.Dense(units=10, activation='softmax'))