基于卷积神经网络的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张都被正常识别,这个正确率已经很高了,可以接受。
- 点赞
- 收藏
- 关注作者
评论(0)