【人工智能项目】CIFAR10识别实验及分析

news/2024/11/8 0:50:27/

【人工智能项目】CIFAR10识别实验及分析

在这里插入图片描述
本次分享的是当时接的一个实验报告的活儿,那么话不多说 ,走起来瓷!!!

一、 数据预处理

1.1 实验环境

本实验采用的软硬件实验环境如表所示:
在这里插入图片描述
在Windows操作系统下,采用基于Tensorflow的Keras的深度学习框架,对MNIST进行训练和测试。

采用keras的深度学习框架,keras是一个专为简单的神经网络组装而设计的Python库,具有大量预先包装的网络类型,包括二维和三维风格的卷积网络、短期和长期的网络以及更广泛的一般网络。使用keras构建网络是直接的,keras在其Api设计中使用的语义是面向层次的,网络组建相对直观,所以本次选用Keras人工智能框架,其专注于用户友好,模块化和可扩展性。

1.2 实验数据集CIFAR10介绍

CIFAR-10数据集由10个类的60000个32x32彩色图像组成,每个类有6000个图像。有50000个训练图像和10000个测试图像。

数据集分为五个训练批次和一个测试批次,每个批次有10000个图像。测试批次包含来自每个类别的恰好1000个随机选择的图像。训练批次以随机顺序包含剩余图像,但一些训练批次可能包含来自一个类别的图像比另一个更多。总体来说,五个训练集之和包含来自每个类的正好5000张图像。
以下是数据集中的类,以及来自每个类的10个随机图像:
在这里插入图片描述

1.3 数据预处理

数据预处理阶段对图像进行归一化处理,我们将图片中的这些值缩小到 0 到 1 之间,然后将其馈送到神经网络模型。为此,将图像组件的数据类型从整数转换为浮点数,然后除以 255。这样更容易训练,以下是预处理图像的函数:务必要以相同的方式对训练集和测试集进行预处理:

之后对标签进行one-hot编码处理:将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点;机器学习算法中,特征之间距离的计算或相似度的常用计算方法都是基于欧式空间的;将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。

1.4 数据预处理核心代码

(1) 加载数据集

# 加载数据集
cifar10 = tf.keras.datasets.cifar10
(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()

(2) 数据集展示

#显示训练集中的前 25 张图像,并在每张图像下显示类别名称。验证确保数据格式正确无误,然后我们就可以开始构建和训练网络了。
plt.figure(figsize=(10,10))
for i in range(25):## 在当前图下生成子图 5*5个图plt.subplot(5,5,i+1)plt.xticks([])plt.yticks([])plt.grid(False)plt.imshow(train_images[i], cmap=plt.cm.binary)#显示 当前图片的类别
plt.xlabel(train_labels[i])

(3) 数据归一化

train_images = train_images / 255.0
test_images = test_images / 255.0

二、模型构建

模型搭建采用VGG16的形式,进行搭建。并搭建了一个建议的MLP感知器模型与之对比模型效果,

2.1 模型代码

(1)MLP感知器

# Build MLP
model = Sequential()model.add(Dense(units=256,input_dim=784,kernel_initializer='normal',activation='relu'))
model.add(Dense(units=128,kernel_initializer='normal',activation='relu'))
model.add(Dense(units=64,kernel_initializer='normal',activation='relu'))
model.add(Dense(units=10,kernel_initializer='normal',activation='softmax'))model.summary()

(2)CNN卷积神经网络

# 搭建VGG16
#layer1 32*32*3
model = Sequential()
model.add(Conv2D(64, (3, 3), padding='same',
input_shape=(32,32,3)))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(Dropout(0.3))#layer2 32*32*64
model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2),strides=(2,2),padding='same')  )#layer3 16*16*64
model.add(Conv2D(128, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(Dropout(0.4))#layer4 16*16*128
model.add(Conv2D(128, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))#layer5 8*8*128
model.add(Conv2D(256, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(Dropout(0.4))#layer14 1*1*512
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(BatchNormalization())#layer15 512
model.add(Dense(512))
model.add(Activation('relu'))
model.add(BatchNormalization())#layer16 512
model.add(Dropout(0.5))
model.add(Dense(10))
model.add(Activation('softmax'))
# 10
model.summary()

2.2 模型解释

模型训练过程中,我们用到VGG-5的卷积神经网络结构。
在这里插入图片描述

VGGNet是牛津大学计算机视觉组和Google DeepMind公司的研究员一起研发的深度卷积神经网络,并在2014年举办的ILSVRC中获得了定位任务第一名和分类任务第二名的好成绩。它继承了AlexNet的思路,一样由5个卷积层和3个全连接层组成。只不过在每个卷积层中进行2~4次连续卷积。

  • 在VGGNet中,卷积层使用的卷积核均为3x3,步长为1.卷积之后都要进行最大池化Max pooling,池化核为2x2,步长为2.
  • 所有的隐藏层都使用ReLU激活函数
  • 全连接层1,2使用Dropout来避免过拟合,概率为0.5

其多次重复使用同一大小的卷积核来提取更复杂和更具有表达性的特征。卷积核采用33的卷积,VGGNet拥有5段卷积,每一段内有2~3个卷积层,同时每段尾部都会连接一共最大池化层用来缩小图片尺寸。每段内的卷积核数量一样,越靠后的段的卷积核数量越多:64-128-256-512-512.其中经常出现多个完全一样的33的卷积层堆叠在一起的情况,这其实是非常有用的设计。两个3x3的卷积层串联相当于一个1个5x5的卷积层,即一个像素会跟周围55的像素产生关联,可以说感受野的大小为5x5.三个3x3的卷积层串联的效果则相当于1个7x7的卷积层。除此之外,3个串联的33的卷积层,拥有比1个7x7的卷积层更少的参数量,只有后者的一半。最重要的是,3个3x3的卷积层拥有比1个7x7的卷积层更多的非线性变换(前者可以使用三次ReLU激活函数,而后者只有一次),使得CNN对特征的学习能力更强。

总之在VGG16模型中:

  • 1.用多层的卷积层组合配以小尺寸的滤波器,能实现大尺寸滤波器的感受野的同时,还能使参数数量更少;
  • 2.表示层深度的增加,能有效提升模型的性能;
  • 3.模型融合的性能优于单模型的性能;
  • 4.训练期间分阶段降低学习率有助模型收敛;

三、结果和可视化

3.1 结果

初始参数设定好之后开始训练,每次训练需要微调参数以得到更好的训练结果,经过多次尝试,最终设定参数为:

  • 优化器:adam优化器
  • 训练轮数:30
  • 每次输入的数据量:256

VGG16的卷积神经网络对CIFAR数据集进行训练,并采用上述的模型参数,进行30轮训练,在训练集上达到了98%的准确率,在测试集上达到了81.8%的准确率。

为了更好的分析我们的结果,这里用混淆矩阵来评估我们的模型性能。在模型评估之前,先学习一些指标。

TP(True Positive):将正类预测为正类数,真实为0,预测也为0FN(False Negative):将正类预测为负类数,真实为0,预测为1FP(False Positive):将负类预测为正类数, 真实为1,预测为0。TN(True Negative):将负类预测为负类数,真实为1,预测也为1混淆矩阵定义及表示含义:

混淆矩阵是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值,矩阵的列表示预测值,下面以本次案例为例,如下:
其在各类上的精准率和召回率如下图所示
在这里插入图片描述

在测试集上的准确率为
在这里插入图片描述
在测试集上的混淆矩阵如下图所示:
在这里插入图片描述

3.2 结果对比

并与四层全连接层模型进行对比,全连接层的模型结构如下:
在这里插入图片描述
其结果如下:
在这里插入图片描述
在这里插入图片描述

总之,从结果上来看,最后经过不断地参数调优最终训练出了一个分类正确率在80%左右的模型,并且通过实验证明了模型具有很强的鲁棒性。

四、课程收获与建议

本文通过对卷积神经网络的研究流程分析,提出了一套完整的卷积神经网络CIFAR10手写体识别流程并也将本文的数据集分类正确率提高到80%的水平;其次,本文构建的模型是具有普适性的,可以稍加改进就应用于不同的数据集进行特征提取及分类。再次,本文在构建模型的过程中综合考虑了计算资源和时间成本,构建的卷积神经网络模型在普通的个人笔记本上即可进行训练,此外还增加了MLP感知器作为对比,从结果中看出卷积神经网络效果更好。综合以上几点来看,本文的研究具有现实可应用性,具有可推广性,因而具有较高的实用价值!

在这里插入图片描述


http://www.ppmy.cn/news/273828.html

相关文章

浅谈智能推荐

前言 据公开资料记载:今年3月份抖音日活用户数量约为6.1亿至6.2亿。而微视日活3亿,要知道微信的日活跃用户达到10.9亿;有7.8亿人每天翻看着朋友圈,其中的1.2亿人还会在朋友圈里发点什么;3.6亿人每天浏览公众号来获取对…

大数据和人工智能的概念

大数据和人工智能的概念 概述大数据和人工智能领域的一些热门趋势。我们将看到世界如何通过数字化而改变,从而导致消费和工业领域的大数据现象;了解到数据量呈指数级增长,从太字节到艾字节再到泽字节;意识到计算机的处理能力增加…

电脑如何用HDMI连接电视

因为现在的液晶电视基本上都有VGA接口,所以你可以很容易地用VGA线实现电脑连接电视上,但是该文有一个地方没有提到,那就是分辨率的问 题,现在的液晶电视的主流面板已经是全高清面板(1920X1080),…

计算机屏幕尺寸像素点距概念,各种电脑显示器尺寸对应的最佳分辨率大小是多少...

大家用一键重装系统软件安装好系统后显示器屏幕很小、显示效果不清新等情况,这时候请大家稍安勿躁,这不是系统问题也不是你显示器问题,一般在正确安装好显卡驱动后,调整下分辨率即可,操作步骤如下 第一步、检查显卡驱动…

u盘资料不小心删除如何找回

U盘作为一个便携式存储设备,越来越多人使用它来存储重要的资料。虽然U盘的数据安全性很高,但是由于各种原因,U盘里的数据有可能会被误删除。这时,许多人会感到手足无措,不知道该怎么办。如果你也遇到了这种情况&#x…

​即将开幕!​2023 年金融营销科技价值发现论坛亮点前瞻

由神策数据主办 Hi-Finance、爱设计、亚马逊云科技 协办和支持的 开放融合 引领营销 5.0 新纪元 暨 2023 年金融营销科技价值发现论坛 即将于 6 月 9-10 日在中国杭州开幕 届时百余位金融数字化从业者将共聚一堂 探讨金融业发展的新思路、新路径、新趋势 2023 年,数…

人脸识别应用前景

清晨,当你信步走到公司大门前,门前的智能终端准确地报出你的名字,并向你问候:“早上好!”接着,你坐在个人电脑前,电脑自动登陆到你的账户上,你不需要输入任何密码便开始了一天的工作…

程序员,我们都是夜归人

音响随机播放着音乐,偶然跳出一首《都是夜归人》的乐曲,让我不禁想起程序员这个群体,夜归人也是不少的啊。恩,我这里说的「夜归」正是指的加班,进入这个行业,成为程序员谁没加过班呢,所以我们都…