楼主: 珞珈山书记
56 0

[教育经济学基本知识] 卷积神经网络入门:从原理到实践 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-9-26
最后登录
2018-9-26

楼主
珞珈山书记 发表于 2025-11-26 11:08:54 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

卷积神经网络入门:从原理到实践

本文旨在帮助读者深入理解卷积神经网络(CNN)的基本原理,并揭示其在计算机视觉任务中表现卓越的原因。我们将通过构建一个简单的CNN模型,对MNIST手写数字数据集进行分类,从而直观地展示其工作流程与优势。

构建一个基础的卷积神经网络

在之前使用全连接(密集)网络处理MNIST数据时,模型的测试准确率约为97.8%。接下来,我们尝试采用卷积神经网络来提升性能。以下是该模型的实现代码:

from tensorflow import keras
from tensorflow.keras import layers

# 定义输入张量形状
inputs = keras.Input(shape=(28, 28, 1))
x = layers.Conv2D(filters=32, kernel_size=3, activation="relu")(inputs)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Conv2D(filters=64, kernel_size=3, activation="relu")(x)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Conv2D(filters=128, kernel_size=3, activation="relu")(x)
x = layers.Flatten()(x)
outputs = layers.Dense(10, activation="softmax")(x)

model = keras.Model(inputs=inputs, outputs=outputs)

值得注意的是,该卷积神经网络接收的输入张量维度为:

(image_height, image_width, image_channels)

其中不包含批量维度。本例中所使用的输入尺寸为:

(28, 28, 1)

这恰好与MNIST图像的标准格式一致。

模型结构解析

下面是对上述卷积神经网络架构的具体分析:

Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 28, 28, 1)]       0         
_________________________________________________________________
conv2d (Conv2D)              (None, 26, 26, 32)        320       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 13, 13, 32)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 11, 11, 64)        18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 5, 5, 64)          0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 3, 3, 128)         73856     
_________________________________________________________________
flatten (Flatten)            (None, 1152)              0         
_________________________________________________________________
dense (Dense)                (None, 10)                11530     
=================================================================
Total params: 104,202
Trainable params: 104,202
Non-trainable params: 0
_________________________________________________________________

观察可知,每一个

Conv2D

MaxPooling2D

操作后的输出均为一个三维张量,其形状如下:

(height, width, channels)

随着网络层数加深,特征图的宽度和高度通常会逐渐减小,而通道数量则由卷积层的第一个参数决定,如32、64或128。

在最后一个卷积层之后,输出的张量形状变为:

(3, 3, 128)

为了将此三维特征输入到后续的全连接分类器中,我们首先使用

Flatten

层将其展平为一维向量,然后再接入

Dense

层完成最终的类别预测。

模型训练与性能评估

接下来,我们在MNIST数据集上对该卷积神经网络进行训练:

from tensorflow.keras.datasets import mnist

# 加载并准备数据
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# 数据预处理
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype("float32") / 255
test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype("float32") / 255

# 编译模型
model.compile(optimizer="rmsprop",
              loss="sparse_categorical_crossentropy",
              metrics=["accuracy"])

# 开始训练
model.fit(train_images, train_labels, epochs=5, batch_size=64)

训练完成后,我们对模型在测试集上的表现进行评估:

test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f"Test accuracy: {test_acc:.3f}")

运行结果如下:

Test accuracy: 0.991

相较于此前全连接网络的97.8%准确率,当前卷积神经网络达到了99.1%的测试精度,错误率相对降低了约60%,效果显著提升。

为何卷积神经网络更具优势?

相比于传统的密集连接网络,卷积神经网络之所以在图像识别任务中表现更优,关键在于两者学习模式的本质差异:

  • Dense层:学习的是全局特征模式,即依赖于整个输入空间的所有像素点之间的关系。
  • 卷积层:专注于提取局部特征模式,仅关注图像中局部区域的小范围窗口内信息。

这种设计赋予了卷积神经网络两个重要特性:

  1. 平移不变性:一旦某个特征模式在图像某处被成功识别(例如右下角),那么无论它出现在图像的哪个位置,网络都能有效检测到。这一性质极大增强了模型的数据利用效率,使其能在较少样本的情况下获得良好的泛化能力。
  2. 空间层次结构感知能力:卷积网络能够逐层构建从简单边缘、角点到复杂纹理和对象部件的分层表示,形成对图像内容的多层次理解,从而更有效地捕捉视觉语义信息。

卷积神经网络能够逐步学习从简单到复杂的视觉特征:首个卷积层通常识别基础的局部结构(如边缘),第二个卷积层则组合这些初级特征以检测更广泛的模式,后续层继续构建更高层次、更具抽象性的表示。这种层级化特征提取机制使模型能有效捕捉图像中的复杂语义信息。

padding

深入理解卷积运算

卷积操作作用于一个三维张量,称为特征图,包含两个空间维度(高度和宽度)以及一个深度维度(通道轴):

  • 对于RGB图像,通道数为3,分别对应红、绿、蓝三个颜色通道
  • 对于灰度图像(例如MNIST数据集中的图像),通道数为1,仅表示单一灰度值

该过程通过在输入特征图上滑动一个小窗口(常见为3×3或5×5),提取每个位置的局部区域,并对所有这些图块应用相同的线性变换,最终生成一个新的输出特征图。每一个输出通道对应一个可学习的滤波器,用于响应输入中特定类型的特征。

卷积的核心参数

  • 图块尺寸:即卷积核大小,常用3×3或5×5
  • 输出深度:决定使用的滤波器数量,控制输出特征图的通道数

工作原理简述:在三维输入特征图上移动指定大小的窗口,从每个位置抽取一个局部三维图块;然后将该图块与一个可训练的权重矩阵(即卷积核)进行逐元素乘法并求和(张量积),得到一个标量响应;所有位置完成计算后,将结果按空间位置重组为新的三维输出特征图。

边界处理与填充策略

由于滑动窗口无法完全覆盖边界区域,原始卷积会导致输出特征图的空间尺寸缩小。例如,在5×5的输入上使用3×3的卷积核,仅有9个中心点可以完整容纳窗口,导致输出变为3×3。

为了保持空间分辨率不变,常采用填充技术——在输入的四周添加额外的行和列。对于3×3卷积核,只需在每侧填充1行或1列即可维持尺寸一致。

Keras中通过以下参数控制填充方式:

  • 'valid':不进行填充,仅使用有效区域(无越界的操作)
  • 'same':自动填充,使得输出的高度和宽度与输入相同

"valid"

"same"

步幅与下采样机制

步幅定义了相邻卷积窗口之间的移动距离,默认为1。当设置步幅大于1时(如步幅=2),称为步进卷积,可实现对特征图的空间降维,相当于在宽度和高度方向均执行2倍下采样。

然而,在多数图像分类任务中,我们更倾向于使用最大汇聚而非大步幅卷积来进行下采样。

最大汇聚的作用与优势

最大汇聚通过对输入特征图上的局部区域取最大值来生成输出,其操作方式类似于卷积,但使用的是固定的、非学习的规则(即取最大值),而不是可学习的权重矩阵。

典型配置为2×2的窗口配合步幅2,从而实现特征图尺寸减半。

为何选择最大值而非平均值?因为在特征图中,关键信息往往体现为某个模式是否出现在某区域,而最大值更能反映这种“存在性”特征,相比均值更具判别力。

max

下采样的意义

  • 降低后续层需要处理的数据量,提升计算效率
  • 通过逐层扩大感受野,使高层卷积核能够感知更大范围的空间上下文,形成具有层级结构的感受域体系

总结

本文介绍了卷积神经网络的基础组件:特征图、卷积运算和最大汇聚。你已经了解了它们的工作机制及其在构建图像识别模型中的作用。凭借局部连接、权重共享和空间下采样三大特性,卷积神经网络在图像分类等任务中表现出卓越性能,成为现代计算机视觉技术的核心支柱。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:神经网络 神经网 Categorical Activation activatio

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-9 05:10