基于卷积神经网络的CIFAR10图像分类

一、CIFAR10数据集介绍

1.1 数据集介绍

  CIFAR-10 数据集由10个类别的60000张32x32彩色图像组成,每类6000张图像。有50000张训练图像和10000张测试图像。
  数据集分为五个训练批次和一个测试批次,每个批次有 10000 张图像。测试批次包含从每个类别中随机选择的 1000 张图像。训练批次包含随机顺序的剩余图像,但一些训练批次可能包含比另一个类别更多的图像。在它们之间,训练批次包含来自每个类的5000张图像。
  以下是数据集中的类,以及每个类中的10张随机图像:
在这里插入图片描述
  这些类是完全互斥的。汽车和卡车之间没有重叠。“汽车”包括轿车、SUV 之类的东西。“卡车”仅包括大卡车。都不包括皮卡车。

1.2 数据集的下载和测试

(1)下载CIFAR10数据集
在这里插入图片描述
(2)显示数据集的信息,查看数据形状,通过下图可以看到,训练集的图像有50000条数据,且都是32*32大小的图片,3代表的是3通道(RGB),测试集的有10000条数据。
在这里插入图片描述
(3)查看单张图片和对应的标签值,可以看到,我们查看训练集下标为6的样本,输出[2],代表的是鸟类,图片图下。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、实验步骤

2.1 定义标签字典

定义每一个数字所代表的图像类别的名称
在这里插入图片描述

2.2 数据预处理

  特征数据标准化测试,由于RGB的值都是[0,255],我们将所有图片的数据归一化处理,即全部除以255即可。
在这里插入图片描述
  先查看第一张图片的像素值,再进行归一化查看,输出结果如下:
[59 62 63]
[0.23137255 0.24313726 0.24705882]

2.3 定义网络结构

  图像的特征提取:通过卷积层1、降采样层1、卷积层2以及降采样层2的处理,提取图像的特征。
  全连接神经网络:全连接层、输出层所组成的网络结构。
在这里插入图片描述
第一个卷积层:卷积核大小为3*3
在这里插入图片描述
为了防止过拟合,我加入一个Dropout层。
在这里插入图片描述
第1个池化层:使用最大池化
在这里插入图片描述
第2 个卷积层
在这里插入图片描述
再次防止过拟合
在这里插入图片描述
第2个池化层
在这里插入图片描述
这里由于我笔记本的配置不行,所以我将128个神经元的全连接层去掉,直接平坦化以后加入只有10个神经元的输出层
在这里插入图片描述
至此,网络结构定义完毕。

2.4 查看模型摘要

在这里插入图片描述
  通过下图可以清楚地看出每层的输入通道、输出通道、以及参数的数量,这里由于我笔记本配置并不是很高,所以我将128个神经元的全连接层去掉,直接加入一个平坦层,平坦化以后加入只有10个神经元的输出层。

第一个卷积层的参数个数
=(输入通道数*卷积核大小+偏置项)*输出通道数
=(3*3*3+1)*32
=896

在这里插入图片描述

2.5 模型训练

设置模型训练超参数
在这里插入图片描述
设置模型训练模式
在这里插入图片描述
训练模型:20%做验证集,其他的做训练集,每次训练完一个周期显示一个输出。
在这里插入图片描述
训练过程如下:40000条样本+10000条验证信息
在这里插入图片描述

2.6 可视化训练过程数据

定义训练过程可视化函数:
在这里插入图片描述
可视化损失:
在这里插入图片描述
  可视化损失图像见下图,可以看到,损失是越来越小的,我们的训练次数调的有点小,机器配置好的可以适当调得大一些,效果会更明显。
在这里插入图片描述
可视化准确率:
在这里插入图片描述
在这里插入图片描述

2.7 评估模型及预测

  如下图输出所示,准确率大概在66%左右,其实效果还行,如果想提高准确率那就加大训练次数,这对机器配置有一定要求。
在这里插入图片描述
在这里插入图片描述

2.8 应用模型及预测

在这里插入图片描述
  直接把具体的分类值带回来,可以看到,第一个样本的值是3,我没有用独热编码,这样对开发人员更明显。
在这里插入图片描述

三、实验结果

3.1 定义显示图像数据及其对应标签的函数

在这里插入图片描述
在这里插入图片描述

3.2 可视化预测结果

  这里调用可视化预测结果的函数,我们这里只查看前10张照片
在这里插入图片描述
在这里插入图片描述
  从图片上面的标签可以看到,第1张、第8张图片的识别不对,其余8张都被正常识别,这个正确率已经很高了,可以接受。

猜你喜欢

转载自blog.csdn.net/qq_43753724/article/details/121591523