实验一 基于人工神经网络的数码识别

上传人:第*** 文档编号:31137248 上传时间:2018-02-05 格式:DOC 页数:8 大小:63.50KB
返回 下载 相关 举报
实验一 基于人工神经网络的数码识别_第1页
第1页 / 共8页
实验一 基于人工神经网络的数码识别_第2页
第2页 / 共8页
实验一 基于人工神经网络的数码识别_第3页
第3页 / 共8页
实验一 基于人工神经网络的数码识别_第4页
第4页 / 共8页
实验一 基于人工神经网络的数码识别_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《实验一 基于人工神经网络的数码识别》由会员分享,可在线阅读,更多相关《实验一 基于人工神经网络的数码识别(8页珍藏版)》请在金锄头文库上搜索。

1、人工智能导论课程基于人工神经网络的数码识别班级:计 1103学号:201107010330姓名:贾梦洁成绩评定:评阅老师:日 期:实验报告正文一、实验目的 基于神经网络的数字识别系统二、实验内容 通常实现手写体数字识别技术的方法有很多种,比如说 Fisher 线性判别方法,最小风险贝叶斯判别方法,朴素贝叶斯判别方法,神经网络方法等。这些方法都可以实现手写体数字的识别,本课题是采用后向传播(BP)神经网络算法,先用 MATLAB 自带的函数im2bw 把输入的数字图像二值化处理,然后取得图片数字部分的最大行列和最小行列,对图片进行实际大小的裁剪,为接下来的归一化做铺垫,取得图像的矩阵特征值,输入

2、到设置好的 BP 网络中,让网络学习,并保存网络,最后用 sim 函数仿真识别。运行程序后,训练好的神经网络对输入的数字进行识别。但是有时识别同一数字图片后所得出的结果会不相同,训练网络的时长,精确度也不相同。由此我们可以得出神经网络具有不稳定性和局限性,同时很多因素都能影响网络,比如加入噪声,所以神经网络仍需要人们进一步的研究。三、实验所用智能算法基本原理与流程 学习过程中由信号的正向传播与误差的逆向传播两个过程组成. 正向传播时, 模式作用于输入层, 经隐层处理后, 传入误差的逆向传播阶段, 将输出误差按某种子形式, 通过隐层向输入层逐层返回, 并“分摊”给各层的所有单元, 从而获得各层单

3、元的参考误差或称误差信号, 以作为修改各单元权值的依据. 权值不断修改的过程, 也就是网络学习过程. 此过程一直进行到网络输出的误差准逐渐减少到可接受的程度或达到设定的学习次数为止. BP 网络模型包括其输入输出模型, 作用函数模型, 误差计算模型和自学习模型. BP 网络由输入层, 输出层以及一个或多个隐层节点互连而成的一种多层网, 这种结构使多层前馈网络可在输入和输出间建立合适的线性或非线性关系, 又不致使网络输出限制在 -1 和 1 之间. 该系统使用自建样本库,应用 BP 神经网络算法对样本进行训练识别。系统分为预处理、特征提取、分类器三部分。其中,预处理包括数据的读取,灰度转换,二值

4、化,去噪,然后得到特征值,分类器的设计是整个系统的核心部分。具体程序流程图如下: 四、系统构成与程序设计 #include tvec.h #include tmat.h#include 五、核心代码 #include tvec.h #include tmat.h#include typedef tmat CMatrix; typedef tvec CVector;一个简单易用的矩阵类库 使用简介: 初始化矩阵: tmaxA(3,2); -生成一个 3 行 2 列的零阵 初始化矩阵: tmaxB(2,2,a); -生成一个 2 行 2 列的矩阵并利用数组 a 的前 22个元素为其赋值。 这里要求

5、 a 至少要包含 22 个元素 给矩阵元素赋值: A(1,2)=1.0; -将 1.0 赋给矩阵 A 的第 1 行、第 2 列取矩阵元素的值: f=A(2,2); -取出矩阵 A 第 2 行、第 2 列的值赋给 f 矩阵的加、减、乘: A=B+C;C=B*A;等等,可以像普通数据类型那样直接进行运算符运算 矩阵转置: transpose(A); 求矩阵行列式: det(A); 注意:必须是方阵 矩阵求逆: inv(A); 注意:必须是方阵 得到矩阵的行数和列数: A.nrows(); A.ncols(); resize 矩阵: A.resize(2,2); -取原来 A 矩阵的前 22 个元素

6、来构造新尺寸的 A 另外,tvec.h 则包含了一个矢量(向量) 类库,这里也简要介绍一下 初始化向量: tvecA; -生成一个一维的向量。默认初始值为 0 初始化向量: tvecB(4); -生成一个 4 维的向量 初始化向量: tvecC(4,0.1); -生成一个 4 维的向量,并将每一维元素初始化为 0.1 初始化向量: tvecD(5,a); -生成一个 5 维的向量,并用数组 a 的前 5 个元素为其赋值 初始化向量: tvecE(B); -由向量 B 来初始化向量 E。相当于复制向量给向量的元素赋值: B(1)=2.0; -给 B 向量的第 1 维元素赋值为 2.0 提取向量元

7、素的值: f=B(2); -将 B 向量的第 2 维元素提取出来,赋给变量 f 得到向量的维数: B.nsize(); 【注意】: 1.本类库的矩阵、向量运算采用值传递 2.本类库的矩阵和向量的第一个元素的起始下标为 1,不是 0。这点尤其要注意。这和 C 语言中的数组不一样CVector V3; bool test() V0.resize (4); V0(1)=1; double k=V0(1); coutLoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, NULL); / The one and only

8、 window has been initialized, so show and update it. pFrame-ShowWindow(SW_MAXIMIZE); pFrame-UpdateWindow(); return TRUE; / / CDigitRecApp message handlers / / CAboutDlg dialog used for App About class CAboutDlg : public CDialog public: CAboutDlg(); / Dialog Data /AFX_DATA(CAboutDlg)enum IDD = IDD_AB

9、OUTBOX ; /AFX_DATA / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTUAL / Implementation protected: /AFX_MSG(CAboutDlg) / No message handlers /AFX_MSG DECLARE_MESSAGE_MAP() ; CAboutDlg:CA

10、boutDlg() : CDialog(CAboutDlg:IDD) /AFX_DATA_INIT(CAboutDlg) /AFX_DATA_INIT void CAboutDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CAboutDlg) /AFX_DATA_MAP BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) /AFX_MSG_MAP(CAboutDlg) / No message handlers /AFX_MSG_MAP END_MESSAGE_MAP() / App command to run the dialog void CDigitRecApp:OnAppAbout() CAboutDlg aboutDlg; aboutDlg.DoModal(); / CDigitRecApp message handlers六、屏幕截图与结论分析 七、主要参考文献与网页 http:/ 百度文库让每个人平等地提升自我 http:/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号