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

Posted 别团等shy哥发育

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于卷积神经网络的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张都被正常识别,这个正确率已经很高了,可以接受。

以上是关于基于卷积神经网络的CIFAR10图像分类的主要内容,如果未能解决你的问题,请参考以下文章

PaddlePaddle系列CIFAR-10图像分类

基于cifar10实现卷积神经网络图像识别

基于kaggle平台的 CIFAR-10 - Object Recognition in Images 分类问题

基于kaggle平台的 CIFAR-10 - Object Recognition in Images 分类问题

卷积神经网络

低卷积神经网络精度 CIFAR-10