数字识别的主要算法
- 格式:doc
- 大小:166.57 KB
- 文档页数:7
基于数字图像识别的算法设计作者:吴元林金秀章来源:《电子世界》2013年第17期【摘要】本文以数字识别系统的基本流程为主线,从数据的提取与预处理、特征的提取与选择,到分类器的设计等部分都进行了较为详尽的分析与研究。
着重研究了几个主要的用于分类的算法如最小距离法、近邻法、K-近邻法和BP神经网络,并通过MATLAB仿真实验分析了不同算法的识别率。
为工程应用提供了可靠的理论依据和实际的使用经验。
【关键词】最小距离法;近邻法;K-近邻法;BP神经网络1.引言模式识别是人类的一项基本智能,人们每时每刻都在进行着“模式识别”。
随着计算机技术的普及和发展,让计算机拥有识别能力收到越来越多的研究学者的重视,也是人工智能和机器人技术发展的前提。
模式识别是指对表征事物或现象的各种形式的(数值的、文字的和逻辑关系的)信息进行处理和分析,以对事物或现象进行描述、辨认、分类和解释的过程,是信息科学和人工智能的重要组成部分[1]。
生活中最简单的事物无过于简单的数字0-9,同时,数字在各个方向领域应用广泛,如:车牌识别,邮政编码识别等。
因此,数字字符识别是一项有实际应用的课题。
2.数字识别基本步骤数字识别是通过读取所需识别的数字图片的特征值输入到某个已经定义好的识别算法中进行识别,并输出识别结果,其基本步骤如图2-1所示。
如图2-1所示,数字识别步骤主要有:数据提取、数据预处理、特征值提取和选择以及分类器和分类决策。
下面分别对这几个步骤进行分析。
2.1 数据提取本文所处理的为0-9的灰度图片,总共有400组图片,分为0-9的数字十组,每组40个,分为30个训练样本和10个测试样本。
本文借助matlab软件自带的imread函数和dir函数对“数字”文件夹下的所有图片进行读取,获得一个包含图片数据的36*20*40*10的四维数组。
每幅图片的数据为36*20的数据矩阵。
2.2 预处理图像预处理要根据实际图像进行相应操作,以便使处理时间和正确率两者结合起来。
模板匹配算法进行数字(非手写数字)识别的基本原理 模板匹配算法是一种常用的数字识别方法,其基本原理是通过比对模板图像和待识别图像的相似度来判断数字是否匹配。
该算法适用于非手写数字的识别,下面将对其进行详细介绍。
1、模板获取: 在模板匹配算法中,首先需要获取一组已知数字的模板图像。
这些模板图像应该具有代表性,覆盖各种不同的数字样式和字体。
可以通过人工绘制、网上下载或者从已有的数字图像中提取获得。
2、预处理: 在进行匹配前,需要对模板图像和待识别图像进行预处理,以便提取数字的特征。
预处理包括图像灰度化、二值化、降噪等步骤。
2.1 图像灰度化: 将彩色图像转换为灰度图像,以便简化后续处理过程。
通过加权平均法或者取红绿蓝通道的平均值来获得每个像素点的灰度值。
2.2 图像二值化: 将灰度图像转换为黑白图像,可以通过设定一个阈值,将灰度图像中大于阈值的像素点设为白色,小于阈值的像素点设为黑色。
二值化后的图像有利于数字的概括和匹配。
2.3 图像降噪: 在二值化后,图像可能存在一些由噪声引起的孤立的像素点或者细小的连通区域。
通过使用滤波器等降噪技术,可以减少这些噪声对识别结果的影响。
3、模板匹配: 匹配算法通过计算待识别图像与所有模板图像的相似度,找到最匹配的数字。
常用的相似度计算方法有欧氏距离、相关系数、巴氏距离等。
3.1 欧氏距离: 欧氏距离是计算两个图像之间差异的一种方法,可以通过计算对应像素点之间的差值的平方和再开方来得到。
计算公式如下:``` d = √(∑(I1(x,y) - I2(x,y))^2)``` 其中,d表示欧氏距离,I1和I2分别表示待识别图像和模板图像在相应位置的像素值。
3.2 其他相似度计算方法: 除了欧氏距离,还可以使用相关系数或者巴氏距离等其他相似度计算方法。
相关系数通过计算待识别图像和模板图像的相关性来衡量相似程度,巴氏距离则通过计算两个图像之间的统计特征来比较相似度。
4、匹配结果: 匹配算法将返回一个匹配结果,即对待识别图像中数字的识别结果。
Python+Opencv实现数字识别的⽰例代码⼀、什么是数字识别? 所谓的数字识别,就是使⽤算法⾃动识别出图⽚中的数字。
具体的效果如下图所⽰:上图展⽰了算法的处理效果,算法能够⾃动的识别到LCD屏幕上⾯的数字,这在现实场景中具有很⼤的实际应⽤价值。
下⾯我们将对它的实现细节进⾏详细解析。
⼆、如何实现数字识别? 对于数字识别这个任务⽽⾔,它并不是⼀个新的研究⽅向,很久之前就有很多的学者们在关注这个问题,并提出了⼀些可⾏的解决⽅案,本⼩节我们将对这些⽅案进⾏简单的总结。
⽅案⼀:使⽤现成的OCR技术。
OCR,即⽂字识别,它是⼀个⽐较成熟的技术,当前已经具有很多性能优异的开源⼯具包可以供⼤家使⽤,即我们仅仅需要关注的是如何调⽤这些接⼝即可,如何你想要了解它们的实现细节,那么你就需要去详细的理解源码啦。
除此之外,当前的OCR算法已经可以很好的识别图像中的简单⽂字和数字等,当前研究的⼀个热点是如何准确快速的识别出图⽚中的倾斜⽂本和不同语⾔的⽂字等,下图展⽰了⼀个简单的识别样例,即识别笔筒上⾯的⽂字。
⽅案⼆:使⽤深度神经⽹络。
随着深度学习技术的快速发展,神经⽹络被引⼊到计算机视觉当中的多个领域中,对于数字识别这个简单的任务⽽⾔,神经⽹络可以获得准确的识别结果,⽐较有名的是mnist数据集。
但是这种⽅法⾸先需要⽤户收集⼤量的数据集;然后需要进⾏模型训练和参数调节;通常需要花费较⼤的⼈⼒和物⼒。
⽅案三:使⽤本⽂的思路,即根据七段数码管的知识识别LCD上的数字。
这种⽅法适⽤于识别LCD屏幕上的数字,当然通过合理的扩展,也可以⽤来识别LCD上⾯的⽂字;该算法不仅具有较快的识别速度,⽽且可以取得较⾼的识别精度。
三、识别LCD屏幕上⾯的数字的原理详解 在现实⽣活中,我们经常会看到各种各样的LCD屏幕,⼩到我们的MP3,⼤到⼴场中的电视等,随着各种应⽤的不断出现,LCD屏幕频繁的出现在我们现实⽣活中的多个场景中,⽽快速、准确的识别出LCD上⾯的数字就成为了⼀个新的刚需,这样可以极⼤的节约⼈⼒和物⼒成本,下⾯将对LCD屏幕数字识别的原理进⾏说明,知其然不许知其所以然。
数字识别实验报告数字识别实验报告引言:数字识别是计算机视觉领域的一个重要研究方向,它涉及到图像处理、模式识别等多个学科。
本实验旨在通过构建一个数字识别模型,探索不同算法在数字识别中的效果,并比较它们的准确性和稳定性。
一、实验设计1. 数据集选择本实验选用了MNIST数据集,该数据集包含了大量手写数字的图像样本,是数字识别领域中最经典的数据集之一。
2. 算法选择本实验采用了三种常见的数字识别算法:K近邻算法、支持向量机算法和深度学习算法(卷积神经网络)。
3. 实验步骤(1)数据预处理:对原始图像进行灰度化、二值化等处理,以便将图像转化为算法所需的输入格式。
(2)特征提取:提取图像中的特征,如边缘、纹理等,以便算法能够更好地区分不同的数字。
(3)模型训练:使用训练集对选定的算法进行训练,并调整算法的参数以提高模型的准确性。
(4)模型测试:使用测试集对训练好的模型进行测试,并记录准确率和识别速度等指标。
(5)结果分析:比较不同算法在数字识别中的表现,并分析其优缺点。
二、实验结果1. K近邻算法经过实验,我们发现K近邻算法在数字识别中表现出较高的准确性,但由于其计算复杂度较高,在大规模数据集上的运行速度较慢。
2. 支持向量机算法支持向量机算法在数字识别中也取得了不错的效果,尤其在处理非线性可分问题时表现出色。
然而,该算法对于大规模数据集的训练时间较长。
3. 深度学习算法(卷积神经网络)深度学习算法在数字识别中展现出了强大的潜力,通过构建多层卷积神经网络,我们得到了较高的准确率和较快的识别速度。
然而,该算法对于数据集的规模和质量要求较高,需要更多的计算资源和训练时间。
三、结果分析综合比较三种算法的实验结果,我们可以得出以下结论:1. K近邻算法在准确性方面表现出色,但在处理大规模数据时速度较慢。
2. 支持向量机算法在处理非线性问题时具有优势,但对于大规模数据集的训练时间较长。
3. 深度学习算法在准确率和识别速度方面都有较好的表现,但对数据集的规模和质量要求较高。
数字识别算法数字识别算法是指通过计算机程序对数字图像进行分析和处理,从而识别出数字的算法。
数字识别算法是计算机视觉领域的重要研究方向之一,广泛应用于手写数字识别、车牌识别、人脸识别等领域。
常见的数字识别算法包括传统的模板匹配算法、神经网络算法、支持向量机算法等。
下面将对这三种算法进行详细介绍。
1. 模板匹配算法模板匹配算法是最基本、最简单的数字识别算法之一,它的基本思想是将待识别的数字图像与已知数字模板进行比较,找出最相似的模板作为识别结果。
具体实现过程如下:首先将数字图像进行二值化处理,得到二值图像;然后将二值图像与数字模板进行逐像素比较,计算它们的相似度;最后选择相似度最高的模板作为识别结果。
模板匹配算法的优点是实现简单、计算速度快,但它的缺点也很明显,即只能识别与模板相似度较高的数字,对于变形、噪声等情况的数字识别效果较差。
2. 神经网络算法神经网络算法是一种基于生物神经系统的数字识别算法,它的基本思想是模拟人脑神经元之间的相互作用,通过训练神经网络来实现数字识别。
神经网络算法的实现过程如下:首先将数字图像进行预处理,提取出数字的特征向量;然后将特征向量输入到神经网络中,通过训练神经网络来学习数字的特征,从而实现数字识别。
神经网络算法的优点是具有很强的自适应性和鲁棒性,对于变形、噪声等情况的数字识别效果较好。
但它的缺点也很明显,即需要大量的训练数据和计算资源,训练时间长,而且对于神经网络的结构和参数的选择也需要一定的经验和技巧。
3. 支持向量机算法支持向量机算法是一种基于统计学习理论的数字识别算法,它的基本思想是通过构建最优的超平面来实现数字的分类。
具体实现过程如下:首先将数字图像进行预处理,提取出数字的特征向量;然后将特征向量作为样本输入到支持向量机中,通过训练支持向量机来学习数字的特征,从而实现数字的分类和识别。
支持向量机算法的优点是具有很强的泛化能力和鲁棒性,对于变形、噪声等情况的数字识别效果较好。
从零开始,轻松掌握数字识别算法数字识别算法是计算机视觉领域中非常重要的一种技术,它可以
通过对数字图像的处理和分析,实现对数字的自动识别。
在进行数字
识别算法之前,我们需要先了解数字图像处理和机器学习的基础知识,这样才能更好地理解算法的原理和应用。
数字图像处理是数字识别算法的基础,它主要是对数字图像进行
预处理,包括预处理、特征提取和分类几个主要部分。
首先,预处理
指的是对数字图像进行灰度化、二值化和降噪等处理,使图像更加清
晰明了,方便后续处理;其次,特征提取是指从数字图像中提取出数
字的特征,包括线条、笔画、边缘等,以便进行分类;最后,分类则
是根据提取出的特征,使用机器学习算法进行分类,实现数字的自动
识别。
常见的数字识别算法包括最邻近法、支持向量机和卷积神经网络等。
其中,最邻近法是最简单的一种算法,它的基本原理是找到与待
分类数字最近的已知数字,将其分类为同一类别;支持向量机则是一
种较为常用的算法,它可以通过选取最优分类超平面,对数字进行分类;卷积神经网络则是近年来非常流行的一种计算机视觉算法,它通
过构建多层神经网络,实现对数字的高精度识别。
总体来说,数字识别算法在很多实际应用场景中都有着广泛的应用,特别是在OCR、数字图像识别等方面。
掌握数字识别算法对于IT
从业者来说,不仅可以提高工作效率,还能给人扩展技能树,有助于提升自己的职业竞争力。
c程序数字识别代码C程序数字识别代码数字识别是计算机视觉领域中的一个重要任务,它的目标是将图像中的数字进行自动识别和分类。
C语言作为一种高效的编程语言,可以用来实现数字识别的算法和模型。
在本文中,我们将介绍一个基于C语言的数字识别代码。
我们需要明确数字识别的基本原理。
数字识别通常涉及两个主要步骤:特征提取和分类。
在特征提取阶段,我们需要从输入的图像中提取出有用的特征信息,这些特征可以帮助我们区分不同的数字。
常用的特征提取算法包括边缘检测、角点检测和颜色直方图等。
在分类阶段,我们使用已经训练好的分类模型对提取出的特征进行分类,将其归类为具体的数字。
接下来,让我们来看一下基于C语言的数字识别代码的实现。
首先,我们需要导入一些必要的库文件,如stdio.h和stdlib.h,以便实现输入输出和内存管理等功能。
然后,我们定义一个函数来读取输入的图像,并将其转换为合适的数据类型。
在转换的过程中,我们可以对图像进行一些预处理操作,如灰度化、二值化和降噪等。
这些操作可以帮助我们提高数字识别的准确度。
在特征提取阶段,我们可以使用一些经典的算法来提取图像的特征。
例如,可以使用Sobel算子来进行边缘检测,找出数字图像中的边缘信息;可以使用Harris角点检测算法来找出数字图像中的角点信息;还可以使用直方图算法来提取图像的颜色特征。
这些特征提取算法都可以在C语言中实现,并与我们的数字识别代码结合使用。
在分类阶段,我们需要训练一个分类模型来对提取出的特征进行分类。
常用的分类算法包括K近邻算法、支持向量机算法和神经网络算法等。
这些算法都可以在C语言中实现,并与我们的数字识别代码结合使用。
通过训练分类模型,我们可以将输入的数字图像分类为具体的数字,并输出识别结果。
除了特征提取和分类算法,我们还可以使用一些其他的技术来提高数字识别的准确度。
例如,可以使用图像增强算法来增强输入图像的质量;可以使用数据增强算法来增加训练样本的数量;还可以使用模型优化算法来提高分类模型的性能。
水表读数识别算法以水表读数识别算法为标题,本文将介绍水表读数识别算法的原理、应用场景以及相关技术。
水表读数识别算法是指通过对水表图像进行处理和分析,从中提取出水表读数的数字信息。
这一算法在水表抄表、智能水务管理等领域有着重要的应用价值。
一、水表读数识别算法的原理水表读数识别算法主要基于计算机视觉和图像处理技术。
其基本原理可以分为以下几个步骤:1. 图像采集:通过摄像头或扫描仪等设备,将水表图像转化为数字信号。
2. 图像预处理:对采集到的图像进行预处理,包括灰度化、二值化、去噪等操作,以便后续的数字识别处理。
3. 特征提取:通过特定的算法和方法,从预处理后的图像中提取出水表读数所对应的数字特征。
4. 数字识别:将提取出的数字特征与预先训练好的模型进行匹配和识别,从而得到准确的水表读数。
水表读数识别算法可以应用于以下几个方面:1. 水表抄表:传统的水表抄表工作繁琐且容易出错,而水表读数识别算法可以通过自动识别水表读数,提高抄表的效率和准确性。
2. 智能水务管理:借助水表读数识别算法,可以实现对大量水表的自动抄表和数据管理,为水务管理部门提供及时、准确的数据支持。
3. 節水監測:水表读数识别算法可以用于监测用户的用水情况,帮助用户发现用水异常和节约用水。
三、水表读数识别算法的技术水表读数识别算法涉及到多个技术和方法,下面介绍几种常见的技术:1. 图像处理:包括图像的灰度化、二值化、边缘检测、形态学处理等,用于提取图像中的数字信息。
2. 特征提取:通过图像处理技术,提取出水表读数所对应的数字特征,如数字的形状、轮廓等。
3. 模式识别:通过构建模型和训练样本,利用机器学习和模式识别的方法,实现对水表读数的准确识别。
4. 深度学习:利用深度神经网络等技术,可以实现对水表读数的高精度识别和自动化处理。
四、水表读数识别算法的挑战与发展方向水表读数识别算法在实际应用中还面临一些挑战,如光照条件、水表图像质量等因素的影响。
论基于机器学习的手写数字识别技术一.引言手写数字识别(Handwritten Digit Recognition)是指利用计算机程序识别手写数字的过程。
这项技术已广泛应用于大多数生活领域,如数字签名、邮政编码、搜索引擎、语音识别和智能手机键盘等。
基于机器学习的手写数字识别技术在准确性和速度方面较传统的方法更具优势,广受欢迎。
本文将讨论基于机器学习的手写数字识别技术,包括什么是机器学习,如何使用机器学习实现手写数字识别,机器学习算法以及其在手写数字识别方面的应用等问题。
二.什么是机器学习?机器学习是人工智能的分支之一,是指计算机通过学习来改进性能的过程。
这种学习通常是基于数据和统计算法运算的方式进行的。
机器学习可以分为监督学习、无监督学习和强化学习三种类型。
监督学习是指通过标记数据进行训练,使计算机在新数据上能够更好地预测。
无监督学习是指无需标记数据进行训练的学习方法。
强化学习是指通过奖励和惩罚来训练计算机,使其学习更好的行为。
机器学习技术可以在许多领域中有良好的应用,如语音识别、图像识别、自然语言处理等。
三.如何使用机器学习实现手写数字识别?机器学习可以用于手写数字识别的实现,其过程包括以下几个步骤:1.数据预处理数据预处理是指将原始数据进行转换和归一化,以便计算机进行分析和使用。
在手写数字识别任务中,原始数据是一张包含手写数字的图像。
将图像转换为我们可以计算的数字矩阵是第一步。
我们可以通过将图像分为像素网格来实现这一点,并将黑色像素和白色像素分别转换为1和0来表示。
接下来,数字矩阵可以被归一化为统一的大小。
数据预处理的最终目的是将图像转换为数学形式,从而容易处理。
2.特征选择在机器学习模型中,特征是指代表数据某方面的相关信息。
在handwritten digit recognition中,特征通常是指图像的像素值。
然而,在所有像素值中选择哪些特征是至关重要的。
因为我们只需要选择有用的特征,以避免模型出现过拟合,而不选择所有的特征。
knn算法的例子k-最近邻算法(k-nearest neighbors,简称k-NN)是一种常用的分类和回归算法。
它基于一个简单的假设:如果一个样本的k个最近邻属于某个类别,那么该样本也很可能属于该类别。
k-NN算法非常直观和易于理解,因此被广泛应用于各种领域。
下面将以几个具体的例子来说明k-NN算法的应用。
1. 手写数字识别在机器学习领域,手写数字识别是一个经典的问题。
k-NN算法可以用于将手写数字图片分类成0到9之间的数字。
基于已有的数字图片数据集,可以计算待分类图片与每个已有图片的距离,并找出k 个最近邻。
然后根据这k个最近邻的标签来判断待分类图片的数字。
2. 电影推荐系统在电影推荐系统中,k-NN算法可以根据用户的历史评分和其他用户的评分来预测用户可能喜欢的电影。
通过计算待推荐电影与用户历史评分电影的相似度,找出k个最相似的电影,并根据这些电影的评分来预测用户对待推荐电影的评分。
3. 股票市场预测k-NN算法可以用于预测股票市场的趋势。
基于已有的股票数据,可以计算待预测股票与历史股票的相似度,并找出k个最相似的股票。
然后根据这k个股票的涨跌情况来预测待预测股票的涨跌。
4. 医学诊断在医学诊断中,k-NN算法可以帮助医生根据患者的各项指标来预测患有哪种疾病。
通过计算待预测患者与已有患者的相似度,找出k 个最相似的患者,并根据这些患者的疾病情况来预测待预测患者的疾病。
5. 文本分类k-NN算法可以用于文本分类,例如将新闻文章分类成不同的主题。
基于已有的训练数据,可以计算待分类文本与每个已有文本的相似度,并找出k个最相似的文本。
然后根据这k个文本的主题来预测待分类文本的主题。
6. 信用评估在信用评估中,k-NN算法可以用于预测申请贷款的人是否具有良好的信用记录。
通过计算待评估人员与已有人员的相似度,找出k个最相似的人员,并根据这些人员的信用记录来预测待评估人员的信用状况。
7. 图像处理k-NN算法可以用于图像处理,例如图像分类和图像检索。
BP神经网络识别手写数字
1.图像的预处理
对手写数字图像样本灰度化处理,二值化处理,归一化调整等预处理。
其中二值化处理利用greythresh函数得到图像的全局阈值,然后使用im2bw将灰度图像转换为二值图像。
Ibw = im2bw(I1,greythresh(I1));
--Ibw为二值化图像的存储矩阵。
bw2 = edu_imgcrop(Ibw);
%找到图像边界
[y2temp x2temp] = size(bw);
x1=1;
y1=1;
x2=x2temp;
y2=y2temp;
% 找左边空白
cntB=1;
while (sum(bw(:,cntB))==y2temp)
x1=x1+1;
cntB=cntB+1;
end
% 左边
cntB=1;
while (sum(bw(cntB,:))==x2temp)
y1=y1+1;
cntB=cntB+1;
end
% 上边
cntB=x2temp;
while (sum(bw(:,cntB))==y2temp)
x2=x2-1;
cntB=cntB-1;
end
% 下边
cntB=y2temp;
while (sum(bw(cntB,:))==x2temp)
y2=y2-1;
cntB=cntB-1;
end
bw2=imcrop(bw,[x1,y1,(x2-x1),(y2-y1)]);
--对图像进行裁剪,使边框完全贴近字符。
归一化处理将图片归一化为28×28像素点阵图。
2.特征提取
将经过预处理的后的数字图像中提取最能体现这个字符特点的特征向量,然后提取出训练样本中的特征向量带入BP网络中就可以对网络进行训练。
可以采用逐像素特征提取方法提取数字样本的特征向量。
归一化后的图像形成一个28
28 的布尔矩阵,依次取每列的元素转化为784×1的列矩阵,及数字字符的特征向量。
还可以对每幅单个手写体图像进行边缘裁剪后,将裁减后的二值图像
转换成5*7即35维的特征向量,转换过程如下:
bw_7050=imresize(bw2,[70,50]);
for cnt=1:7
for cnt2=1:5
Atemp=sum(bw_7050(((cnt*10-9):(cnt*10)),((cnt2*10-9):(cnt2*10))));%10*10b ox
lett((cnt-1)*5+cnt2)=sum(Atemp);
end
end
lett=((100-lett)/100);
lett=lett';
3.BP 神经网络
BP 神经网络是一个典型的多层神经网络,它包含了输入层,隐藏层和输出层,隐层可以有一层或多层,每层上的神经元称为节点或单元,它们由可修定的权值(w )互连,除了连接输入单元,每个单元还连接一个偏置(b)。
3.1 输入层神经元个数的确定
将数字图像的特征向量作为神经网络的输入,所以神经网络的输入层神经元个数等于特征向量的维数,即28×28=784个输入神经元。
要识别10个数字,所以输出选择为10×1的矩阵,即输出节点数为10,输入为0时,第一个神经元为1,其他为0,;输入数字为1时,第二个神经元为1,其他为0;以此类推。
3.2 隐含层数和神经元个数的确定
隐含层数越多,神经网络的学习速度越慢,所以选3层神经网络。
隐含层神经元的个数是根据网络收敛性能的好坏来确定的,在总结大量网络结构的基础上,得到经验公式:s=51.035.077.054.212.043.02+++++m n m nm ,其中,n 为输入层神经元个数,m 为输出层神经元个数,可得隐含层神经元个数为15。
3.3 BP 神经网络构造
BP 算法由两部分组成:信息的正向传递与误差的反向传播。
在正向传递中,
输入信息从输入层经隐含层逐层计算传向输出层,每一层神经元的状态只影响下一层神经元的状态。
如果在输出层没有得到期望的输出则计算输出层的误差变化值,然后转向反向传播,通过网络将误差信号沿原来的连接通路反向修改各层神经元的权值直到达到期望目标。
BP 算法属于有监督的学习算法:根据训练样本和期望输出设置合适的权值,不断调整网络连接的权值,使误差达到实际的要求。
网络结构初始化:(784,15,10),innum=784,midnum=15,outnum=10; 权值初始化:
w1=rands(midnum,innum);····· 输入层到隐含层
b1=rands(midnum,1);
W2=rands(midnum,outnum);·······隐含层到输出层
b2=rands(outnum,1);
输出函数:()x y y =
网络预测输出:y(x)=input_train(:,i)
隐含层输出:y ’=∑--+j j j b x w 11
输出层的输出:()b2`2,+⨯=y w x h b w
梯度下降算法
反向传播学习规则是基于梯度下降算法的,梯度下降算法是利用梯度下降的方向迭代寻找目标函数的参数的最优值,就是向着减少误差的方向调整。
学习效率为η。
损失函数:()()()2,||||21,x h x y b w C b w x
-≡∑
求偏导:22
11v v c v v c c ∆∂∂+∆∂∂≈∆ 梯度向量:T v c v c c ⎪⎪⎭⎫ ⎝⎛∂∂∂∂≡∇21
, c v ∇-=∆η c v v ∇-=η, 所以,k
k k w c w w ∂∂-=η, l l l b c b b ∂∂-=η,
主要的matlab 代码:
Innum=785;
Midnum=15;
Outnum=10;
w1=rands(midnum,innum);
b1=rands(midnum,1);
W2=rands(midnum,outnum);
b2=rands(outnum,1);
W2_1=w2;w2_2=w2_1;
W1_1=w2;w1_2=w1_1;
B1_1=b1;b1_2=b1_1;
b2_1=b2;b2_2=b2_1;
%学习率
xite=0.1;
alfa=0.01;
%% 网络训练
for i=1:1:4500
%% 网络预测输出
x=input_train(:,i);
% 隐含层输出
for j=1:1:midnum
I(j)=input_train(:,i)'*w1(j,:)'+b1(j);
Iout(j)=1/(1+exp(double(-I(j))));
end
% 输出层输出
yn=w2'*Iout'+b2;
%% 权值阀值修正
%计算误差
e=output_train(:,i)-yn;
%计算权值变化率
dw2=e*Iout;
db2=e';
%=======由于采用的是sigmoid单元,所以要对每个输出单元以及隐藏单元计算误差项======%
for j=1:1:midnum
S=1/(1+exp(double(-I(j))));
FI(j)=S*(1-S);
end
for k=1:1:innum
for j=1:1:midnum
dw1(k,j)=FI(j)*x(k)*(w2(j,:)*e);% db1(j)=FI(j)*(w2(j,:)*e);
end
end
w1=w1_1+xite*dw1';
b1=b1_1+xite*db1';
w2=w2_1+xite*dw2';
b2=b2_1+xite*db2';
w1_2=w1_1;w1_1=w1;
w2_2=w2_1;w2_1=w2;
b1_2=b1_1;b1_1=b1;
b2_2=b2_1;b2_1=b2;
End
4.BP神经网络的测试。