深度学习实战:卷积神经网络(CNN)原理与应用
在图像识别与计算机视觉领域,卷积神经网络(CNN)无疑是基石般的存在。本文将深入探讨 CNN 的核心工作机制,并通过 TensorFlow 实战演示如何从零搭建一个经典的 LeNet-5 模型,解决手写数字识别问题。
CNN 核心组件解析
卷积层:特征提取的引擎
卷积层是 CNN 最关键的组成部分,它的作用类似于人眼观察物体时的局部感知。通过卷积核在输入图像上滑动,网络能够自动捕捉边缘、纹理等基础特征。
想象一下,卷积核是一个小型的权重矩阵,它在图像上以设定的步长移动。每次移动,卷积核都会与对应区域的像素值做内积运算,输出一个特征值。这个过程不仅保留了空间结构信息,还能大幅减少参数数量。
注意:卷积核的数量直接决定了输出特征图的通道数。增加卷积核数量意味着提取的特征维度更丰富,但计算成本也会相应上升。
下面是一个定义 3×3 卷积核并处理 28×28 单通道图像的示例。这里我们使用 SAME 填充来保持尺寸不变:
import tensorflow as tf
from tensorflow.keras.layers import Conv2D
# 定义卷积层:32 个滤波器,3x3 核,步长 1,填充 SAME
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)
池化层:降采样与防过拟合
经过卷积层后,特征图通常包含大量冗余信息。池化层的主要任务是对特征图进行降采样。这不仅能减少后续层的参数数量和计算量,还能在一定程度上防止过拟合。
常见的池化方式有两种:
- 最大池化(Max Pooling):选取局部区域内的最大值。它能更好地保留纹理特征,是实际中最常用的方式。


