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

482 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第1天

一、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张都被正常识别,这个正确率已经很高了,可以接受。