深度学习实战:卷积神经网络(CNN)原理与 LeNet-5 构建
CNN 核心组件解析
卷积层:提取图像局部特征
卷积层是 CNN 的核心,负责通过卷积核对输入图像进行局部特征提取。卷积核本质上是一个小型的权重矩阵,它按照设定的步长在图像上滑动,每滑动一次便与对应区域的像素值做内积运算,输出一个特征值。这个过程能有效捕捉图像的边缘、纹理等基础信息。
需要注意的是,卷积核的数量决定了输出特征图的通道数,数量越多,提取的特征维度越丰富。
在实际操作中,我们通常定义一个 3×3 大小的卷积核,步长设为 1,填充方式为 SAME,对 28×28 单通道的手写数字图像进行卷积操作。这样输出特征图的尺寸保持 28×28,通道数则由卷积核数量决定。
import tensorflow as tf
from tensorflow.keras.layers import Conv2D
# 定义卷积层
conv_layer = Conv2D(
filters=32,
kernel_size=(3, 3),
strides=(1, 1),
padding="SAME",
input_shape=(28, 28, 1)
)
# 模拟输入:1 张 28×28 单通道图像
input_image = tf.random.normal(shape=(1, 28, 28, 1))
# 执行卷积运算
output_feature = conv_layer(input_image)
print("输出特征图形状:", output_feature.shape)
池化层:降低特征维度与防止过拟合
池化层的作用是对卷积层输出的特征图进行降采样。它能在保留关键特征的同时,显著减少参数数量和计算量。常见的池化方式有两种:最大池化和平均池化。最大池化选取局部区域内的最大值作为输出,能更好地保留纹理特征;平均池化则选取平均值,有助于保留背景特征。
实战中,我们常定义 2×2 大小的最大池化层,步长设为 2。对卷积层输出的特征图进行池化后,输出特征图的尺寸会缩小为原来的 1/2。
from tensorflow.keras.layers import MaxPooling2D
# 定义最大池化层
pool_layer = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding="SAME")
pool_output = pool_layer(output_feature)
(, pool_output.shape)


