深度学习实战:卷积神经网络(CNN)原理与 LeNet-5 搭建
在深度学习中,卷积神经网络(CNN)是处理图像数据的核心架构。本文将深入解析卷积层与池化层的工作原理,并通过 TensorFlow 实战搭建经典的 LeNet-5 模型。内容涵盖从 MNIST 数据集加载、模型编译训练到过拟合处理及优化技巧,帮助开发者掌握 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=)
pool_output = pool_layer(output_feature)
(, pool_output.shape)


