[发明专利]一种基于Keras框架和深度神经网络的图片分类方法有效
| 申请号: | 201910529685.1 | 申请日: | 2019-06-19 |
| 公开(公告)号: | CN110378383B | 公开(公告)日: | 2023-06-16 |
| 发明(设计)人: | 韩飞;方升;凌万云;凌青华;吴伟康 | 申请(专利权)人: | 江苏大学 |
| 主分类号: | G06V10/764 | 分类号: | G06V10/764;G06V10/774;G06V10/82;G06N3/0464;G06N3/047;G06N3/048;G06N3/08;G06F16/55 |
| 代理公司: | 暂无信息 | 代理人: | 暂无信息 |
| 地址: | 212013 江*** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 keras 框架 深度 神经网络 图片 分类 方法 | ||
1.一种基于Keras框架和深度神经网络的图片分类方法,其特征在于,包括步骤:
手写数字图像数据集的预处理,首先将手写数字图像数据集划分为训练集、测试集,然后对其进行维度修改,并对标签数据进行one-hot编码;通过Keras框架构建三层卷积神经网络,设置每层卷积神经网络的卷积核个数、卷积核大小、激活函数和池化层;进一步通过Keras框架构建三层全连接层和输出层,设置每层全连接层和输出层的神经元个数;最后调用Keras框架的API构建损失函数,并在训练集上进行训练,得到的模型在测试集上进行测试,得出准确率;
通过Keras框架构建三层卷积神经网络的具体步骤为:
步骤2.1:在获得了数据集后,接下来需要构建三层卷积神经网络,首先创建第一层卷积神经网络,通过函数model.add(Conv2D(filters=64,kernel_size=(3,3),strides=
(1,1),padding='same',input_shape=(28,28,1),activation='relu'))来构建第一层卷积神经网络的卷积层,Conv2D是keras库中的函数,用于创建卷积核,filters=64表示构建了64个卷积核,对每个图片使用64个卷积核进行计算,得到64个结果,即64个图片,kernel_size=(3,3)表示每个卷积核的大小是3*3,strides=(1,1)表示每个卷积核左右移动和上下移动的步长是1个像素,padding=’same’表示输入的图片大小跟输出的图片大小一致,通过零填充来保证大小一致,input_shape=(28,28,1)表示输入的图片大小是28*28*1,其中的1表示图片是1通道,即黑白图片,activation='relu'表示激活函数是relu函数,激活函数是为了增加网络的非线性分割能力,而采用Relu激活函数,整个过程的计算量节省很多,并且不会出现梯度消失的情况;通过model.add(MaxPooling2D(pool_size=(2,2)))函数进行池化,MaxPooling2D是keras库中的函数,用于对卷积层得到的数据进行池化,具体含义为:池化的窗口是2*2,移动步长默认是1*1,即左右移动和上下移动都是1个像素,将2*2四个像素中选取其中最大的一个值作为一个代表像素;接下来是第一层卷积神经网络的DropOut层,调用model.add(Dropout(0.5))函数,以概率0.5保留每个神经元节点,Dropout就是在不同的训练过程中随机扔掉一部分神经元,也就是让某个神经元以一定的概率p让其工作,这次训练过程中不更新权值,也不参加神经网络的计算,但是它的权重得保留下来,激活函数如公式(1)所示:
步骤2.2:在步骤2.1中构建了第一层卷积神经网络后,接下来再构建第二层卷积神经网络,通过model.add(Conv2D(128,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu'))函数构造卷积层,参数128表示卷积核个数是128个,kernel_size=(3,3)表示卷积核的大小是3*3,每个图片与128个大小为3*3卷积核相乘,得到128个图片,strides=(1,1)表示每个卷积核移动的步长,即左右移动和上下移动的步长都是1个像素,padding='same'表示经过卷积计算后,输入的图片大小与输出的图片大小一致,通过零填充来保存输入和输出的图片大小一致,activation='relu'表示将卷积后的结果使用relu激活函数进行激活,只是改变结果的值,维度不改变,relu激活函数的优点在第一层卷积神经网络已经说明;经过卷积层后,跟第一层卷积神经网络类似,接下来是池化层和使用DropOut函数处理,通过函数model.add(MaxPooling2D(pool_size=(2,2)))对卷积层得到的结果进行池化,所使用的窗口大小是2*2像素面积,默认左右移动和上下移动的步长是1,在每个窗口中选出最大的一个像素值作为代表值,因此图片的缩小为原来的4倍;经过池化后,通过model.add(Dropout(0.5))函数对池化得到的结果进行选取一些神经元;
步骤2.3:在步骤2.2中构建了第一层卷积神经网络后,接下来再构建第三层卷积神经网络,继续使用model.add(Conv2D(256,kernel_size=(3,3),strides=(1,1),
padding='same',activation='relu'))函数构建第三层卷积神经网络的卷积层,256表示使用256个卷积核,每个图片都与256个卷积核进行计算,得到256个结果,kernel_size=(3,3)表示每个卷积核的大小为3*3,strides=(1,1)表示每个卷积核左右移动和上下移动的步长是1个像素,padding='same'表示经过卷积层后,输入图片的大小和输出图片的大小一致,通过零补充来保证输出图片和输入图片的大小一致,activation='relu'表示将卷积计算的结果通过激活函数relu来激活,通过激活函数relu让计算量减少并且不会出现梯度消失的情况;经过卷积层后,还有池化层和使用DropOut函数进行处理,通过model.add(MaxPooling2D(pool_size=(2,2)))函数进行池化,池化的窗口大小是2*2,默认的移动步长是1*1,即左右移动和上下移动的步长是1个像素,每次移动窗口选出其中最大的一个像素点作为代表值,池化前后的图片大小缩小了4倍;最后执行DropOut函数,以概率0.5保留每个神经元。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于江苏大学,未经江苏大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910529685.1/1.html,转载请声明来源钻瓜专利网。





