基于人工神经网络的识别C语言,实验一基于人工神经网络的数码识别.doc
實驗一基于人工神經(jīng)網(wǎng)絡(luò)的數(shù)碼識別
《人工智能導(dǎo)論》課程
基于人工神經(jīng)網(wǎng)絡(luò)的數(shù)碼識別
班級:計1103學(xué)號:201107010330姓名:賈夢潔
成績評定:評閱老師:日 期:
實驗報告正文一、實驗?zāi)康?????基于神經(jīng)網(wǎng)絡(luò)的數(shù)字識別系統(tǒng)二、實驗內(nèi)容?通常實現(xiàn)手寫體數(shù)字識別技術(shù)的方法有很多種,比如說Fisher線性判別方法,最小風(fēng)險貝葉斯判別方法,樸素貝葉斯判別方法,神經(jīng)網(wǎng)絡(luò)方法等。這些方法都可以實現(xiàn)手寫體數(shù)字的識別,本課題是采用后向傳播(BP)神經(jīng)網(wǎng)絡(luò)算法,先用MATLAB自帶的函數(shù)im2bw把輸入的數(shù)字圖像二值化處理,然后取得圖片數(shù)字部分的最大行列和最小行列,對圖片進(jìn)行實際大小的裁剪,為接下來的歸一化做鋪墊,取得圖像的矩陣特征值,輸入到設(shè)置好的BP網(wǎng)絡(luò)中,讓網(wǎng)絡(luò)學(xué)習(xí),并保存網(wǎng)絡(luò),最后用sim函數(shù)仿真識別。運(yùn)行程序后,訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)對輸入的數(shù)字進(jìn)行識別。但是有時識別同一數(shù)字圖片后所得出的結(jié)果會不相同,訓(xùn)練網(wǎng)絡(luò)的時長,精確度也不相同。由此我們可以得出神經(jīng)網(wǎng)絡(luò)具有不穩(wěn)定性和局限性,同時很多因素都能影響網(wǎng)絡(luò),比如加入噪聲,所以神經(jīng)網(wǎng)絡(luò)仍需要人們進(jìn)一步的研究。三、實驗所用智能算法基本原理與流程?學(xué)習(xí)過程中由信號的正向傳播與誤差的逆向傳播兩個過程組成.?正向傳播時,?模式作用于輸入層,?經(jīng)隱層處理后,?傳入誤差的逆向傳播階段,?將輸出誤差按某種子形式,?通過隱層向輸入層逐層返回,?并“分?jǐn)偂苯o各層的所有單元,?從而獲得各層單元的參考誤差或稱誤差信號,?以作為修改各單元權(quán)值的依據(jù).?權(quán)值不斷修改的過程,?也就是網(wǎng)絡(luò)學(xué)習(xí)過程.?此過程一直進(jìn)行到網(wǎng)絡(luò)輸出的誤差準(zhǔn)逐漸減少到可接受的程度或達(dá)到設(shè)定的學(xué)習(xí)次數(shù)為止.?BP網(wǎng)絡(luò)模型包括其輸入輸出模型,?作用函數(shù)模型,?誤差計算模型和自學(xué)習(xí)模型.?BP網(wǎng)絡(luò)由輸入層,?輸出層以及一個或多個隱層節(jié)點(diǎn)互連而成的一種多層網(wǎng),?這種結(jié)構(gòu)使多層前饋網(wǎng)絡(luò)可在輸入和輸出間建立合適的線性或非線性關(guān)系,?又不致使網(wǎng)絡(luò)輸出限制在-1和1之間.??該系統(tǒng)使用自建樣本庫,應(yīng)用BP神經(jīng)網(wǎng)絡(luò)算法對樣本進(jìn)行訓(xùn)練識別。系統(tǒng)分為預(yù)處理、特征提取、分類器三部分。其中,預(yù)處理包括數(shù)據(jù)的讀取??灰度轉(zhuǎn)換,二值化,去噪,然后得到特征值,分類器的設(shè)計是整個系統(tǒng)的核心部分。具體程序流程圖如下:?
四、系統(tǒng)構(gòu)成與程序設(shè)計?#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列的矩陣并利用數(shù)組a的前2×2個元素為其賦值。???????????這里要求a至少要包含2×2個元素?給矩陣元素賦值: ?A(1,2)=1.0;?? ?-將1.0賦給矩陣A的第1行、第2列?取矩陣元素的值:?f=A(2,2);?????? ?-取出矩陣A第2行、第2列的值賦給f?矩陣的加、減、乘:?A=B+C;C=B*A;等等,可以像普通數(shù)據(jù)類型那樣直接進(jìn)行運(yùn)算符運(yùn)算?矩陣轉(zhuǎn)置:????? ?transpose(A);?求矩陣行列式:?? ?det(A);????? 注意:必須是方陣?矩陣求逆:?????? ?inv(A);??注意:必須是方陣??得到矩陣的行數(shù)和列數(shù):? ? A.nrows();??? A.ncols();??resize矩陣:?? A.resize(2,2);???????????-取原來A矩陣的前2×2個元素來構(gòu)造新尺寸的A?
?另外,tvec.h則包含了一個矢量(向量)類庫,這里也簡要介紹一下??
初始化向量:?tvecA;???????? ?-生成一個一維的向量。默認(rèn)初始值為0?初始化向量:?tvecB(4);????? ?-生成一個4維的向量?初始化向量:?tvecC(4,0.1);?? -生成一個4維的向量,并將每一維元素初始化為0.1?初始化向量:?tvecD(5,a);??? ?-生成一個5維的向量,并用數(shù)組a的前5個元素為其賦值?初始化向量:?tvecE(B);????? ?-由向量B來初始化向量E。相當(dāng)于復(fù)制向量給向量的元素
總結(jié)
以上是生活随笔為你收集整理的基于人工神经网络的识别C语言,实验一基于人工神经网络的数码识别.doc的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 想输入非数字是报错误,C语言上机
- 下一篇: android 5.0新增 ui 控件,