课程设计——基于卷积神经网络实现的图像识别算法

卷积神经网络算法识别猫狗图片
一、收集数据集
对收集到的数据集的来源进行说明,并对数据集进行描述。
描述如:数据集一共有多少张图片,训练集、测试集的划分比例,图片类别等。
数据集在为kaggle比赛猫狗数据
链接为https://gas.graviti.cn/open-data-set-detail
其中一共有25000张图片,其中猫有12500,狗有12500,测试集有12500张图,图片类别为jpg格式。训练集、测试集的划分比例为1:1
此处发的数据集为处理过的数据,即有训练集,测试集和验证集,分别有猫狗图片各1000张。总为6000张猫狗图片。部分类似于如图
在这里插入图片描述

二、数据集预处理
1、数据集预处理过程的实现思路与步骤
由于下载的数据集太大,故此先提取部分图片作为训练集和测试集。将图像复制到训练、验证和测试的目录。然后将图片归一化,使图片可以抵抗几何变换的攻击,它能够找出图像中的那些不变量,从而得知这些图像原本就是一样的或者一个系列的,同时加快训练网络的收敛性。
同时还需要对图像数据增强。因为处理图片时会丢失许多数据。所以需要对数据增强处理。

2、数据集预处理过程的源代码、注释说明

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

用代码对原数据集进行分类创建文件夹等

3、预处理过程的运行结果及简要说明
相关的文件夹
在这里插入图片描述
部分结果:
在这里插入图片描述

这里是把训练集和测试集和验证集创建好了并划分好了。

三、模型的构建、训练、预测与评估
1、模型的构建、训练、预测与评估过程的实现思路与步骤
搭建keras中的sequential模型,设置好卷积层,最大池化层,全连接层等。将划分好的训练集测试集等进行处理即将在执行其他处理前乘到整个图像上并将这个值定为0~1之间的数。自己构建相关数据集。定好图片大小,使用的模型等。定好后训练模型。设置好steps_per_epoch:生成器返回steps_per_epoch次数据时计一个epoch结束,执行下一个epoch,epoch:数据迭代的轮数,validation_data:验证集的生成器,validation_steps:当validation_data为生成器时,本参数指定验证集的生成器返回次数。
当进行模型训练的时候,往往可能错过模型的最佳临界点,即当达到最大精度的时候再进行训练,测试集的精度会下降,这时候就会出现过拟合。为了防止或减少过拟合,第二个模型采用Dropout。它的大致意思是在训练时,将神经网络某一层的单元(不包括输出层的单元)数据随机丢失一部分,实际上是等于创造出了很多新的随机样本,以增大样本量,减少特征量的方法来防止过拟合
同时采用vgg16网络进行使用,VGG16网络为13层卷积层+3层全连接层而组成,VGG16的突出特点是简单,卷积层均采用相同的卷积核参数,池化层均采用相同的池化核参数。

2、模型的构建、训练、预测与评估过程的源代码、注释说明
(1)第一个模型

在这里插入图片描述

(2) 第二个模型

在这里插入图片描述

第一个模型只有图片归一化,第二个模型还有图片的增强等

验证模型判断的代码:
在这里插入图片描述

导入训练好的模型。对图片进行处理如大小等,进行判断。

3、模型的构建、训练、预测与评估过程的运行结果及简要说明
(1)第一个模型

在这里插入图片描述

loss是训练集上的损失、val_loss是测试集上的损失,最终模型的效果val_acc。发现模型效果不是特别好。

(2)第二个模型

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

通过val_acc发现模型效果还可以,图片发现震荡逐渐逐渐减少。

验证模型的结果:(随机设置的猫狗图片)
第一个模型:
在这里插入图片描述

先是打印出相关模型的结构
结果会显示是猫或者是狗

第二个模型:

在这里插入图片描述

四、思考与总结
本次使用的是卷积神经网络,卷积神经网络有3个基本层,卷积层(卷积核),池化层,全连接层。
卷积过程是使用一个卷积核(如图中的Filter),在每层像素矩阵上不断按步长扫描下去,每次扫到的数值会和卷积核中对应位置的数进行相乘,然后相加求和,得到的值将会生成一个新的矩阵。卷积核相当于卷积操作中的一个过滤器,用于提取我们图像的特征,特征提取完后会得到一个特征图。池化操作相当于降维操作,有最大池化和平均池化,本次用的是最大池化。第二各模型中VGG16网络为13层卷积层+3层全连接层而组成。Conv2D卷积层即给图像矩阵四周都加上0。VGG16的特点是简单,第二各模型使用的即是vgg16
卷积神经网络的层级结构有数据输入层,卷积计算层,激励层,池化层,全连接层。
数据输入层:主要是对原始图像数据进行预处理,如归一化
卷积计算层:这一层就是卷积神经网络最重要的一个层次,计算矩阵
激励层:把卷积层输出结果做非线性映射
池化层:池化层的最主要作用就是压缩图像。
全连接层:两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。
开始的时候找数据集比较麻烦,因为不知道能不能使用,然后对数据集的处理不太会,导致在这部分困扰很久。比如归一化,灰度等,因为划分训练集和测试集时出错了。不过后面还好ok了,使用卷积神经网络时代码开始不太会编写,通过百度等相关方法理解了并知道相关使用方法。使用VGG16方法时发现比较简单,所以做了第二个模型。VGG16具有很高的拟合能力;但同时缺点也很明显,训练时间过长,调参难度大。
先要理解卷积神经网络,理解后编写代码就简单多了,就不会说有些参数怎么设置,怎么用法不知道了。然后再对相关图片进行处理。但训练过程使用cpu实在是太慢了,所以想搞个gpu,现在还没有成功弄好gpu。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深度学习(DL,Deep Learning)是机器学习(ML,Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI,Artificial Intelligence)。 [1] 深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字、图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。 深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。 [1] 深度学习在搜索技术、数据挖掘、机器学习、机器翻译、自然语言处理、多媒体学习、语音、推荐和个性化技术,以及其他相关领域都取得了很多成果。深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。 [1] 深度学习是一类模式分析方法的统称,就具体研究内容而言,主要涉及三类方法: [2] (1)基于卷积运算的神经网络系统,即卷积神经网络CNN)。 [2] (2)基于多层神经元的自编码神经网络,包括自编码(Auto encoder)以及近年来受到广泛关注的稀疏编码两类(Sparse Coding)。 [2] (3)以多层自编码神经网络的方式进行预训练,进而结合鉴别信息进一步优化神经网络权值的深度置信网络(DBN)。 [2] 通过多层处理,逐渐将初始的“低层”特征表示转化为“高层”特征表示后,用“简单模型”即可完成复杂的分类等学习任务。由此可将深度学习理解为进行“特征学习”(feature learning)或“表示学习”(representation learning)。 [3] 以往在机器学习用于现实任务时,描述样本的特征通常需由人类专家来设计,这成为“特征工程”(feature engineering)。众所周知,特征的好坏对泛化性能有至关重要的影响,人类专家设计出好特征也并非易事;特征学习(表征学习)则通过机器学习技术自身来产生好特征,这使机器学习向“全自动数据分析”又前进了一步。 [3] 近年来,研究人员也逐渐将这几类方法结合起来,如对原本是以有监督学习为基础的卷积神经网络结合自编码神经网络进行无监督的预训练,进而利用鉴别信息微调网络参数形成的卷积深度置信网络。与传统的学习方法相比,深度学习方法预设了更多的模型参数,因此模型训练难度更大,根据统计学习的一般规律知道,模型参数越多,需要参与训练的数据量也越大。 [2] 20世纪八九十年代由于计算机计算能力有限和相关技术的限制,可用于分析的数据量太小,深度学习在模式分析中并没有表现出优异的识别性能。自从2006年,Hinton等提出快速计算受限玻耳兹曼机(RBM)网络权值及偏差的CD-K算法以后,RBM就成了增加神经网络深度的有力工具,导致后面使用广泛的DBN(由Hin

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值