深度学习-卷积神经网络
卷积神经网络(CNN)知识复习笔记
一、图像基础知识
1.1 图像基本概念
图像是由像素点组成的二维数组,每个像素点的取值范围为[0,255]。像素值越接近0,颜色越暗(接近黑色);像素值越接近255,颜色越亮(接近白色)。
彩色图像由RGB三个通道组成,分别表示红、绿、蓝三原色。图像的基本表示维度为[H, W, C](高度、宽度、通道数)。

1.2 图像加载与处理
使用matplotlib库可以加载和显示图像:
import matplotlib.pyplot as plt
import numpy as np
# 加载图像
img = plt.imread("data/img.jpg")
print("图像形状:", img.shape) # 输出 (H, W, C)
# 显示图像
plt.imshow(img)
plt.axis("off")
plt.show()
二、CNN概述
2.1 什么是卷积神经网络
卷积神经网络(Convolutional Neural Network)是含有卷积层的神经网络,专门用于处理图像、视频等数据。CNN通过卷积层自动学习并提取图像特征。
2.2 CNN基本构成
CNN网络主要由三部分组成:
-
卷积层:负责提取图像中的局部特征
-
池化层:大幅降低参数量级(降维)
-
全连接层:输出最终结果
三、卷积层
3.1 卷积计算原理
卷积运算本质上是卷积核与输入数据的局部区域间做点积运算。卷积核(滤波器)是一组固定的权重,通过在输入数据上滑动并计算点积来生成特征图。
3.2 多通道卷积计算
当输入有多个通道时,卷积核需要拥有相同的通道数。每个卷积核通道与对应的输入图像通道进行卷积,结果按位相加得到最终特征图。
3.3 填充(Padding)与步长(Stride)
-
Padding:在输入特征图边界周围添加额外像素(通常为零),用于保持卷积后特征图尺寸不变
-
Stride:卷积核在图像上滑动的步长大小,影响输出特征图尺寸
3.4 特征图大小计算
输出特征图大小计算公式:
N=(W−F+2P) / S +1
其中:
-
W:输入图像大小
-
F:卷积核大小
-
P:Padding数量
-
S:Stride大小
3.5 PyTorch卷积层API
import torch.nn as nn
# 创建卷积层
conv = nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding)
参数说明:
-
in_channels:输入通道数
-
out_channels:输出通道数(卷积核数量)
-
kernel_size:卷积核大小
-
stride:步长
-
padding:填充数量
四、池化层
4.1 池化层作用
池化层用于降低输入数据的空间维度,减少计算量和内存消耗,提高模型鲁棒性。池化操作通常在卷积层之后进行。
4.2 池化类型
-
最大池化:取池化窗口内的最大值作为输出
-
平均池化:取池化窗口内所有值的平均值作为输出
4.3 多通道池化
池化层对每个输入通道分别进行池化,输入输出通道数保持不变。池化只在宽高维度上进行,不改变通道数。
4.4 PyTorch池化层API
# 最大池化
nn.MaxPool2d(kernel_size=2, stride=2, padding=1)
# 平均池化
nn.AvgPool2d(kernel_size=2, stride=1, padding=0)
五、图像分类案例(CIFAR10)
5.1 CIFAR10数据集
CIFAR-10数据集包含:
-
5万张训练图像
-
1万张测试图像
-
10个类别(飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车)
-
图像大小:32×32×3
5.2 网络架构
class ImageClassification(nn.Module):
def __init__(self):
super(ImageClassification, self).__init__()
self.conv1 = nn.Conv2d(3, 6, stride=1, kernel_size=3)
self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
self.conv2 = nn.Conv2d(6, 16, stride=1, kernel_size=3)
self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)
self.linear1 = nn.Linear(576, 120)
self.linear2 = nn.Linear(120, 84)
self.out = nn.Linear(84, 10)
5.3 模型训练与评估
使用交叉熵损失函数和Adam优化器进行训练,并在测试集上评估模型准确率。
六、优化建议
根据案例运行结果(测试集准确率约57%),可从以下方面进行优化:
-
增加卷积核输出通道数
-
增加全连接层的参数量
-
调整学习率
-
更换优化方法
-
修改激活函数
-
使用更深的网络结构
-
增加数据增强技术
-
使用批量归一化(Batch Normalization)
七、总结
卷积神经网络是计算机视觉领域的核心算法,通过局部连接和权值共享大大减少了网络参数数量。掌握CNN的基本原理、卷积层和池化层的计算过程以及PyTorch实现方法,是深入学习计算机视觉领域更复杂模型的基础。
CNN的核心优势在于其能够自动学习图像特征,无需人工设计特征提取器,在图像分类、目标检测、图像分割等任务中表现出色。
更多推荐


所有评论(0)