深度学习实践之使用CNN在CIFAR-10数据集上进行识别
利用CIFAR-10数据(彩色图像)集实现卷积神经网络(CNN)进行图像分类
1. 数据集准备
CIFAR-10 数据集包括 \(60,000\) 张 \(32 \times 32\) 的彩色图像,分成 \(10\) 类,每类 \(6,000\)张。其中 \(50,000\) 张用于训练,\(10,000\) 张用于测试。
1 |
|
可视化数据集
1 |
|
1 |
|
3. 构建CNN模型
卷积神经网络由卷积层、池化层和全连接层构成。
法一:自定义构建法
1 |
|
将模型进行训练:
1 |
|
在上述代码片段中,对定义的卷积神经网络各个层的详细解释:
卷积层 (Conv2d): 每个卷积层都使用一个3x3的卷积核,输入通道数为3(对于彩色图像),输出通道数分别为32、64和128。padding=1 确保输出特征图的尺寸与输入相同。
卷积层的输出维度可以通过以下公式计算:
\(\text{Output Height}=\left[\frac{\text{Input Height}+2\times\text{Padding}-\text{Kernel Size}}{\text{Stride}}+ 1 \right]\)
\(\text{Output Width}=\left[\frac{\text{Input Width}+2\times\text{Padding}-\text{Kernel Size}}{\text{Stride}}+1\right]\)
在代码中,卷积层的 padding=1 和 stride=1(默认值),因此输出尺寸大致与输入尺寸相同(实际会稍有不同,取决于卷积核的覆盖范围)。
激活层 (ReLU): 使用 ReLU 激活函数。
池化层 (MaxPool2d): 使用 2x2 的最大池化,步长为2。
- 池化层会进一步减小特征图的尺寸。在代码中,池化层的 kernel_size=2 和 stride=2,这意味着特征图的尺寸会减半。
扁平化层 (Flatten): 将多维特征图展平成一维向量,以便输入到全连接层。
全连接层 (Linear): 包含两个全连接层,第一个将特征图的维度从 128 * 4 * 4 减少到512,第二个将维度从512减少到256。
输出层 (Linear): 最后一个全连接层将特征从256减少到10,对应于10个类别。
训练迭代过程以及训练准确率
1 |
|
法二:快速搭建法
1 |
|
将模型进行训练:
1 |
|
训练迭代过程以及训练准确率
1 |
|
法三:自定义构建法的另一种写法
1 |
|
将模型进行训练:
1 |
|
训练迭代过程以及训练准确率
1 |
|
测试模型预测效果
1 |
|
得到预测结果如下图:
注:输出通道
在卷积神经网络(CNN)中,输出通道数(out_channels)是一个超参数,通常由网络设计者根据需要人为设置。它不是通过计算公式自动得到的,而是基于经验、实验或特定任务的需求来选择的。
输出通道数的作用
- 特征检测:每个输出通道对应一种不同的特征检测器。增加输出通道数可以帮助网络学习到更丰富的特征。
- 网络深度:增加输出通道数可以增加网络的深度,有助于提取更复杂的特征,但同时也会增加计算复杂度。
如何选择输出通道数
- 经验法则:通常从较小的输出通道数开始,例如16、32、64等,然后根据任务的复杂性逐步增加。
- 实验:通过实验不同的输出通道数,观察对模型性能的影响,选择最优的配置。
- 任务需求:对于更复杂的任务,可能需要更多的输出通道来捕捉更多的特征。