神經(jīng)網(wǎng)絡(luò)報(bào)告_第1頁(yè)
神經(jīng)網(wǎng)絡(luò)報(bào)告_第2頁(yè)
神經(jīng)網(wǎng)絡(luò)報(bào)告_第3頁(yè)
神經(jīng)網(wǎng)絡(luò)報(bào)告_第4頁(yè)
神經(jīng)網(wǎng)絡(luò)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、神經(jīng)網(wǎng)絡(luò)報(bào)告信計(jì)12 徐文豪模擬人大腦的運(yùn)作方式建立模型去解決實(shí)際問題,提出第一個(gè)人工神經(jīng)元模型的McCulloch和Pitts真是天才。神經(jīng)網(wǎng)絡(luò)發(fā)展到現(xiàn)在功能已經(jīng)非常強(qiáng)大,在模式識(shí)別、回歸擬合和優(yōu)化等方面都有著廣泛的應(yīng)用。這篇報(bào)告較全面地介紹了幾個(gè)神經(jīng)網(wǎng)絡(luò)分支的應(yīng)用,但由于時(shí)間關(guān)系,實(shí)現(xiàn)主要是調(diào)用matlab庫(kù)和臺(tái)灣林智仁教授的libsvm,只有極少部分是自己的思路,這是一個(gè)遺憾,因?yàn)橐羁汤斫馍窠?jīng)網(wǎng)絡(luò)應(yīng)該要實(shí)現(xiàn)理論的算法而不是熟悉調(diào)用方式。1.多層前向網(wǎng)絡(luò)字符識(shí)別Matlab中prprob用26個(gè)35維的向量存儲(chǔ)了26個(gè)英文字母的形狀信息(將每個(gè)字母看成的二值矩陣),字符識(shí)別所要解決的問題

2、就是當(dāng)這些字母向量加了一定的噪聲之后,怎么判斷加噪向量原本屬于哪個(gè)字母。1.1 多層前向網(wǎng)絡(luò)簡(jiǎn)介簡(jiǎn)單來(lái)說(shuō)多層前向網(wǎng)絡(luò)可以用一個(gè)等式表示 其中表示第層的輸出,表示第層相對(duì)于第層的權(quán)系數(shù)矩陣,表示第層的閾值向量,表示第層的激活函數(shù)。從等式(1)可以看出,只要確定了各層的權(quán)系數(shù)矩陣和閾值向量,則整個(gè)多層前向網(wǎng)絡(luò)就確定了。因而,所謂用樣本數(shù)據(jù)訓(xùn)練網(wǎng)絡(luò)就是根據(jù)學(xué)習(xí)算法用樣本輸入輸出確定和。普遍使用的多層前向網(wǎng)絡(luò)學(xué)習(xí)算法是由于1986年提出的反向傳播算法(Back Propagation Algorithm),即BP算法。為了便于算法的敘述,先假設(shè)網(wǎng)絡(luò)層數(shù)為,即輸入層為0層,輸出層為層,并定義第層相對(duì)于的

3、凈輸入為 設(shè)為第個(gè)訓(xùn)練樣本,為網(wǎng)絡(luò)對(duì)應(yīng)于的實(shí)際輸出定義平方誤差為 定義對(duì)于的矩陣變量求導(dǎo)為 設(shè)第層的神經(jīng)元個(gè)數(shù)為個(gè)。BP算法的具體步驟為:Step 1: 選取小隨機(jī)數(shù)作為權(quán)系數(shù)矩陣和閾值的初始值。Step 2: 由等式(1)和等式(2),根據(jù)樣本輸入得到第凈輸入。Step 3: 根據(jù)下面兩個(gè)等式計(jì)算各層 其中,表示點(diǎn)乘。Step 4: 根據(jù)下面等式更新權(quán)值和閾值 1.2 多層前向網(wǎng)絡(luò)字符識(shí)別1.2.1 隱層神經(jīng)元個(gè)數(shù)為10選取隱層神經(jīng)元的個(gè)數(shù)為10,采用每個(gè)字母理想特征向量的20個(gè)加噪的版本(均值為0,標(biāo)準(zhǔn)差為0.1和0.2的高斯白噪各10個(gè))作為訓(xùn)練樣本,選取適當(dāng)?shù)某跏紮?quán)值、初始閾值和動(dòng)量值

4、對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,直到網(wǎng)絡(luò)收斂。訓(xùn)練結(jié)束后產(chǎn)生一系列加噪的特征向量(噪聲為均值為0高斯白噪)作為網(wǎng)絡(luò)的輸入向量,檢驗(yàn)在噪聲標(biāo)準(zhǔn)差依次為下的正確恢復(fù)率,繪出識(shí)別率與噪聲標(biāo)準(zhǔn)差的變化關(guān)系曲線,所用程序見附錄1。結(jié)果如下圖所示:圖1 10神經(jīng)元恢復(fù)率-標(biāo)準(zhǔn)差圖從圖中可以明顯看出,恢復(fù)率隨著標(biāo)準(zhǔn)差的增大而降低。1.2.2 交叉確認(rèn)隱層神經(jīng)元個(gè)數(shù)從等式(1)可以知道隱層神經(jīng)元的個(gè)數(shù)決定了多層前向網(wǎng)絡(luò)的復(fù)雜程度,因而對(duì)識(shí)別恢復(fù)率勢(shì)必會(huì)有很大的影響。首先,隱層神經(jīng)元太少了肯定不行,因?yàn)闊o(wú)法充分記錄樣本的信息。其次,隱層神經(jīng)元太多了也不行,因?yàn)闀?huì)出現(xiàn)過擬合現(xiàn)象從而缺少泛化的能力。交叉確認(rèn)法是確定隱層神經(jīng)元的一個(gè)

5、有效方法,其原理為給出一組合適的神經(jīng)元個(gè)數(shù)向量,通過從全體樣本中取出部分不參與訓(xùn)練的樣本用于檢驗(yàn)不同神經(jīng)元個(gè)數(shù)的恢復(fù)率,取恢復(fù)率最高的個(gè)數(shù)作為隱層神經(jīng)元的個(gè)數(shù)。用于交叉確認(rèn)的隱層神經(jīng)元的個(gè)數(shù)為:5,10,15,20,30,40。訓(xùn)練樣本:每個(gè)字母理想特征向量的40個(gè)加噪的版本(均值為0,標(biāo)準(zhǔn)差為0.1和0.2的高斯白噪各20個(gè))。確認(rèn)樣本:如同訓(xùn)練樣本的選擇。所用程序見附錄2。值得注意的一點(diǎn)是,真正做交叉確認(rèn)時(shí),全體樣本是固定的,因而無(wú)論是劃分25%驗(yàn)證集還是循環(huán)驗(yàn)證,得到的最佳參數(shù)都是固定的。但這里為了簡(jiǎn)便起見,隨機(jī)產(chǎn)生訓(xùn)練集和驗(yàn)證集,因而可能導(dǎo)致得到的最佳神經(jīng)元個(gè)數(shù)不固定。從程序運(yùn)行結(jié)果來(lái)

6、看,大部分得到的最佳個(gè)數(shù)為40,少數(shù)得到的最佳個(gè)數(shù)為30,因而這里我們?nèi)?0作為最佳神經(jīng)元個(gè)數(shù)。在這種情況下,重新調(diào)用附錄1中的程序,結(jié)果如下圖所示:圖2 最佳神經(jīng)元恢復(fù)率-標(biāo)準(zhǔn)差圖很明顯,與圖1相比,通過交叉確認(rèn)的得到的結(jié)果明顯更優(yōu),這也體現(xiàn)了進(jìn)行交叉確認(rèn)的必要性。1.2.3 比較不同網(wǎng)絡(luò)初始值的影響由于BP算法是基于梯度的,因而理論上初始權(quán)系數(shù)矩陣和閾值向量值較小優(yōu)于值較大的情形。實(shí)際上圖1和圖2都是在matlab默認(rèn)的初始網(wǎng)絡(luò)值乘了一個(gè)小系數(shù)0.01做的,現(xiàn)在我們?cè)陔[層神經(jīng)元個(gè)數(shù)為40的情形下,將系數(shù)0.01改為10,得到結(jié)果如下圖所示:圖3 大系數(shù)初始網(wǎng)絡(luò)值的恢復(fù)率-標(biāo)準(zhǔn)差圖這個(gè)結(jié)果反

7、映的事實(shí)是極其明顯的,在用BP算法時(shí),我們必須將初始網(wǎng)絡(luò)值選得相對(duì)較小點(diǎn)!1.2.4 增加含噪訓(xùn)練樣本個(gè)數(shù)當(dāng)合理的訓(xùn)練樣本個(gè)數(shù)增加時(shí),網(wǎng)絡(luò)參數(shù)的設(shè)置就會(huì)更符合樣本輸入和輸出的規(guī)律,因而識(shí)別率勢(shì)必會(huì)提高,為了突出這一特點(diǎn),我們將訓(xùn)練樣本數(shù)變?yōu)樵瓉?lái)的4倍,得到結(jié)果如下:圖4 4倍訓(xùn)練樣本恢復(fù)率-標(biāo)準(zhǔn)差圖這個(gè)效果明顯優(yōu)于圖2,這給我們的啟發(fā)是,在現(xiàn)實(shí)中運(yùn)用多層前向網(wǎng)絡(luò)時(shí),在條件允許的情況下,應(yīng)當(dāng)相對(duì)較多地采集樣本點(diǎn)。2.支撐向量機(jī)字符識(shí)別2.1 支撐向量機(jī)簡(jiǎn)介2.1.1 訓(xùn)練樣本線性可分情形這種情形下,支撐向量機(jī)的根本思路在于在所有可以正確區(qū)分樣本的超平面中找到一個(gè)平移隔離帶間隙最大的最優(yōu)分類超平面

8、。為了便于算法的敘述,先假設(shè)線性可分的訓(xùn)練樣本為,樣本點(diǎn)數(shù)為,最優(yōu)超平面形式如下: 尋找最優(yōu)分類超平面的具體步驟如下:Step 1: 通過構(gòu)造矩陣。Step 2: 寫出由最大間隔優(yōu)化問題對(duì)應(yīng)的拉格朗日乘子導(dǎo)出的優(yōu)化問題 構(gòu)造拉格朗日函數(shù),利用對(duì)對(duì)的梯度為0和約束條件求解出滿足條件的。Step 3: 由最大間隔優(yōu)化問題的KKT條件得到 由等式(10)加上樣本數(shù)據(jù)即可得到最優(yōu)超平面形式(8)中的和。2.1.2 簡(jiǎn)單訓(xùn)練樣本非線性可分情形在這種情形下,樣本雖然非線性可分,但用超平面可以得到較滿意的分類效果,其原理在于在線性可分的基礎(chǔ)上引入松弛變量,其算法和線性可分算法非常相似,只有兩個(gè)較大的差別。首

9、先,最大間隔優(yōu)化問題變?yōu)樽畲箝g隔最少錯(cuò)分優(yōu)化問題,其拉格朗日乘子導(dǎo)出的優(yōu)化問題如下: 對(duì)應(yīng)的KKT條件變?yōu)?2.1.3 復(fù)雜訓(xùn)練樣本非線性可分情形在這種情形下,樣本在維空間已經(jīng)不能用超平面較好的分類了,這時(shí)的思路是用一個(gè)非線性映射將原問題映射到維高維空間中,在這個(gè)空間中樣本樣本是可以用超平面較好的分類的。但這樣就存在兩個(gè)問題,一是這樣的映射構(gòu)造起來(lái)很繁瑣,二是高維空間的內(nèi)積計(jì)算較耗時(shí)。于是支撐向量機(jī)理論中引入了核函數(shù)的概念:設(shè),稱為核函數(shù),如果存在映射使。有了核函數(shù)這個(gè)工具以后,復(fù)雜訓(xùn)練樣本非線性可分情形就變得簡(jiǎn)單,實(shí)際上求解形式和等式(11)、(12)完全相同,只是由之前的變?yōu)橛珊撕瘮?shù)表示的

10、。2.2 支撐向量機(jī)字符識(shí)別在網(wǎng)站 .tw/cjlin 下載臺(tái)灣林智仁教授等的libsvm工具箱libsvm-3.20并在matlab中用make命令將.c文件轉(zhuǎn)換為.mex文件之后svmtrain和svmpredict函數(shù)了(由于是mex文件,在matlab命令界面help是無(wú)用的,但直接輸入函數(shù)名會(huì)自動(dòng)顯示幫助)。取與1.2.2相同個(gè)數(shù)的樣本,用附錄3中的libsvm程序得到結(jié)果如下圖5 svm恢復(fù)率-標(biāo)準(zhǔn)差圖與圖2相比我們發(fā)現(xiàn),當(dāng)標(biāo)準(zhǔn)差較小時(shí)多層前向網(wǎng)絡(luò)和svm效果很接近,但當(dāng)標(biāo)準(zhǔn)差較大時(shí),svm的效果就明顯優(yōu)于多層前向網(wǎng)絡(luò)了,這體現(xiàn)了svm具

11、有較強(qiáng)的健壯性。為了直觀說(shuō)明這一點(diǎn),我們畫出字母X在標(biāo)準(zhǔn)差為0和0.5情況下的對(duì)比圖如下圖6 重噪下字母X比較圖這樣嚴(yán)重加噪的圖像,svm在只有520個(gè)樣本的情.況下還能取得92%以上的恢復(fù)率,確實(shí)很神奇。不過值得一提的是,svm相對(duì)于多層前向網(wǎng)絡(luò)在分類問題上的優(yōu)越性一般只是在訓(xùn)練樣本較少的情形下,當(dāng)訓(xùn)練樣本較多時(shí),兩者的效果是幾乎一致的,采用與1.2.4相同個(gè)數(shù)的訓(xùn)練樣本,用libsvm得到結(jié)果如下:圖7 4倍訓(xùn)練樣本svm恢復(fù)率-標(biāo)準(zhǔn)差圖3.離散Hopfield字符識(shí)別3.1 離散Hopfield簡(jiǎn)介離散Hopfield的本質(zhì)是固定迭代格式下序列收斂的問題,它的一個(gè)特殊要求是迭代向量的分量

12、只能為1或-1(這有助于收斂定理的推導(dǎo)),為了滿足這個(gè)條件,引入Hopfield符號(hào)函數(shù) 值得注意的一點(diǎn)是,離散Hopfield的一般迭代格式為 注意到等式(14)中每次迭代所有的分量都會(huì)更新,但有時(shí)為了收斂性的需要,只隨機(jī)更新其中一個(gè)分量,前者稱為同步工作方式,后者稱為異步工作方式。離散Hopfield有如下兩個(gè)收斂性定理:l 如果Hopfield網(wǎng)絡(luò)的權(quán)矩陣是對(duì)稱的,且,則網(wǎng)絡(luò)在異步工作方式下是漸進(jìn)穩(wěn)定的。l 如果Hopfield網(wǎng)絡(luò)的權(quán)矩陣是對(duì)稱正定的,則網(wǎng)絡(luò)在異步或同步工作方式下都是漸進(jìn)穩(wěn)定的。離散Hopfield的作用在于,如果我們能根據(jù)已知樣本設(shè)計(jì)權(quán)矩陣和閾值向量使得我們想存儲(chǔ)的模

13、式成為迭代序列的不動(dòng)點(diǎn),那么就可以讓加了噪的模式恢復(fù)到其本來(lái)的模式。為此,有如下確定和的Hebb學(xué)習(xí)算法 這個(gè)學(xué)習(xí)算法從線性代數(shù)的角度看是非常直觀的,定義張成的子空間為,即 則對(duì)任意,即為在上的投影。特別地,當(dāng)正交時(shí),有 用離散Hopfield加Hebb學(xué)習(xí)算法做模式識(shí)別要做的事是,對(duì)某個(gè)已經(jīng)存儲(chǔ)的穩(wěn)定態(tài),不妨設(shè),如果信號(hào)是加了噪聲得到的,我們希望通過等式(14)的迭代格式完全或近似恢復(fù)出,為了研究這個(gè)問題,我們將分解如下 其中,這樣 因此若有 則有。從直觀上講,當(dāng)正交時(shí),如果和相似且與不相似時(shí),可由恢復(fù)出。有兩個(gè)問題值得注意,一是在實(shí)際應(yīng)用中很難保證正交,但當(dāng)時(shí)接近正交,再加上的處理可獲得和

14、正交一樣的效果;二是當(dāng)與也很相似時(shí),由等式(19)可以預(yù)測(cè)到,迭代序列很可能收斂到中與相差較大的一個(gè)穩(wěn)定態(tài),為了解決這個(gè)問題,定義信號(hào)權(quán)重: 當(dāng)較大時(shí),迭代會(huì)收斂到一個(gè)空間中與較接近的一個(gè)向量,然后可以通過最小二乘在挑選出出來(lái)。實(shí)際上若接近正交,由,若噪聲幅度有限,則自然不會(huì)很大。到這里,也許會(huì)困惑,既然離散Hopfield加Hebb學(xué)習(xí)算法做模式識(shí)別的條件這么苛刻,還有沒有必要做它呢?實(shí)際上,這么做有兩個(gè)優(yōu)點(diǎn)。最重要的一個(gè)是,由等式(18)和(19)可以看出屬于的噪聲一步迭代就被消除了,再加上,較大,則這種方法可以對(duì)噪聲很大的信號(hào)進(jìn)行恢復(fù)。第二個(gè)是,這種方法只需存儲(chǔ),運(yùn)算方面主要是內(nèi)積,因而

15、相對(duì)于多層前向網(wǎng)絡(luò)和支撐向量機(jī)存儲(chǔ)量小且速度快,適合做高維的問題。3.2 離散Hopfield字符識(shí)別由于信號(hào)只有35維,為了正交性,我們只取3個(gè)穩(wěn)定態(tài),首先用附錄4中的程序?qū)ο嗨贫容^?。摧^大)的三個(gè)字母進(jìn)行識(shí)別,結(jié)果如下:圖8 離散Hopfield恢復(fù)率標(biāo)準(zhǔn)差圖從圖8與圖4和圖7對(duì)比即可發(fā)現(xiàn),用離散Hopfield確實(shí)做到了重噪信號(hào)的識(shí)別問題。同時(shí)對(duì)同樣多的檢測(cè)樣本數(shù),離散Hopfield總體所花時(shí)間為1.57s,而多層前向網(wǎng)絡(luò)和支撐向量機(jī)總體分別花費(fèi)時(shí)間26.51s和3.85s,這驗(yàn)證了這種方法用時(shí)較短的特點(diǎn)。從3.1的推理中我們知道對(duì)識(shí)別效果有很大的影響,為此我們挑選較小的三個(gè)字母,結(jié)

16、果如下:圖9 低恢復(fù)率-標(biāo)準(zhǔn)差圖圖8和圖9的對(duì)比驗(yàn)證了對(duì)模式分類效果的影響。4.離散Hopfield重噪圖像恢復(fù)從3.1中推導(dǎo)的離散Hopfield加Hebb學(xué)習(xí)算法適合識(shí)別重噪信號(hào),我們可以將其應(yīng)用到重噪圖像恢復(fù)上,結(jié)果如下圖所示圖10 離散Hopfield重噪圖像成功恢復(fù)圖這里的圖片取的是信計(jì)12班部分同學(xué)的臉部圖片,實(shí)際上這個(gè)圖片集并不適合離散Hopfield加Hebb學(xué)習(xí)算法,因?yàn)槿四槻坑泻艽蟮南嗨菩?,因此不同圖片之間遠(yuǎn)不能接近正交(我這么做主要是覺得有意思)。這就造成了哪怕特征已經(jīng)取了上萬(wàn)維之多,但是能較好識(shí)別的圖片集實(shí)際只能包含三張。如果圖片集取多了,則會(huì)變得較小,按照3.1中的理

17、論,序列會(huì)收斂到中一個(gè)距離目標(biāo)圖形較遠(yuǎn)的一個(gè)向量。為了驗(yàn)證這一推理,我們將圖片集取為10個(gè),得到結(jié)果如下:圖11 離散Hopfield重噪圖像失敗恢復(fù)圖像這驗(yàn)證了運(yùn)用這個(gè)方法做重噪圖像恢復(fù)時(shí),要求較大的必要性。值得注意的是,為了將圖片變成適合離散Hopfield迭代的分量為-1或1的向量,可以將每個(gè)像素值用2進(jìn)制表示,然后再縱向拉伸。程序見附錄5。5.連續(xù)Hopfield解決TSP問題5.1 連續(xù)Hopfield簡(jiǎn)介連續(xù)Hopfield網(wǎng)絡(luò)的功能在于將求解目標(biāo)函數(shù)的極值問題轉(zhuǎn)換為求解對(duì)應(yīng)常微分方程組的問題。在第4節(jié)中我們注意到離散的Hopfield網(wǎng)絡(luò)即為迭代序列,在連續(xù)情形下,迭代的意義是通

18、過常微分方程組定義的,因此有如下的連續(xù)Hopfield網(wǎng)絡(luò): 其中為向量值函數(shù),為激活函數(shù),為常數(shù),為常向量,為常矩陣。再定義連續(xù)Hopfield的能量函數(shù)(Lyapunov函數(shù))如下 其中,對(duì)連續(xù)Hopfield網(wǎng)絡(luò)和其能量函數(shù),有如下定理:l 如果是對(duì)稱的,則網(wǎng)絡(luò)是漸進(jìn)穩(wěn)定的;l 是網(wǎng)絡(luò)平衡態(tài)是的駐點(diǎn)。由這個(gè)定理,便可將求能量函數(shù)的極值點(diǎn)問題,轉(zhuǎn)換為求連續(xù)Hopfield網(wǎng)絡(luò)解的問題,而等式(22)的求解可通過數(shù)值實(shí)現(xiàn)。因此我們所需要做的主要工作時(shí)就是將目標(biāo)函數(shù)轉(zhuǎn)換為能量函數(shù)形式,但等式(23)的形式太過繁瑣,注意到當(dāng)充分大時(shí)有 等式(24)稱為高增益的能量函數(shù)。5.2 求解TSP問題5.

19、2.1 TSP問題描述考慮到還要在交大讀5年博士,不禁想到從西安出發(fā)到中國(guó)主要旅游城市的TSP問題,因此要求解西安、北京、大理、成都、重慶、桂林、張家界、九寨溝、杭州九個(gè)主要旅游城市的TSP問題,九個(gè)城市間的距離由百度地圖得到,結(jié)果如下圖所示:圖12 九大旅游城市距離圖(單位為公里)為敘述簡(jiǎn)便,不妨用1到9分別代表西安、北京、大理、成都、重慶、桂林、張家界、九寨溝、杭州。5.2.2 用遍歷求TSP準(zhǔn)確解對(duì)這個(gè)問題,總合理路線數(shù)為個(gè),完全可以用遍歷求解。值得一提的是,對(duì)這個(gè)問題,最直接的想法是用8重for循環(huán),但這種想法既不容易實(shí)現(xiàn),又非常耗時(shí)。比較簡(jiǎn)單的算法是將所有線路縱向排成行8列的矩陣(起

20、點(diǎn)和終點(diǎn)可以任意設(shè)置),例如起點(diǎn)為城市1(西安),則只需求城市2到城市8的全排列即可,這個(gè)可以使用交換全排列算法得到,如果是在matlab中且問題的維數(shù)小于等于11,可直接調(diào)用perms函數(shù)得到全排列。得到全排列以后可直接對(duì)每一行求解,如果是在matlab中,可直接通過矩陣并行計(jì)算快速得到,根據(jù)距離矩陣遍歷求解TSP問題的程序見附錄6,得到此TSP問題的準(zhǔn)確解為9 6 7 5 3 4 8 1 2 9,最短總距離為8482.7公里,所花時(shí)間只有0.1s左右。5.2.3 用連續(xù)Hopfield網(wǎng)絡(luò)求TSP近似解由于時(shí)間和難度原因,這個(gè)問題我并未自己建立連續(xù)Hopfield網(wǎng)絡(luò)并數(shù)值求解常微分方程組

21、,而是整理了下王小川MATLAB神經(jīng)網(wǎng)絡(luò)43個(gè)案例分析的程序,見附錄7。由于連續(xù)Hopfield網(wǎng)絡(luò)的初始值是隨機(jī)產(chǎn)生的,因此每次迭代產(chǎn)生的結(jié)果并不相同,甚至有些沒收斂到合理路徑,為展示效果,設(shè)置最大迭代次數(shù)為20000,將程序運(yùn)行8次的結(jié)果列表如下:表1 連續(xù)Hopfield網(wǎng)絡(luò)8次運(yùn)行結(jié)果序號(hào)12345678總長(zhǎng)度8781.98684.58684.58781.98684.58902.89223.68571.6與準(zhǔn)確解8482.7公里相比,這8次迭代都得到了較好的結(jié)果,這驗(yàn)證了利用連續(xù)Hopfield求TSP近似解的有效性。附錄7的程序中包括能量函數(shù)值的變化序列,通過它可以畫出能量函數(shù)的變化

22、曲線,結(jié)果如下圖所示:圖12 連續(xù)Hopfield能量函數(shù)變化曲線從圖中可以看出,隨著常微分方程組的迭代次數(shù)增加,能量函數(shù)總體是先下降后趨于穩(wěn)定的,這驗(yàn)證了5.1中敘述的定理,即連續(xù)Hopfield常微分方程組的解對(duì)應(yīng)于能量函數(shù)的駐點(diǎn)。6.幾點(diǎn)說(shuō)明(1)由于時(shí)間關(guān)系及文章的簡(jiǎn)便性,上文提到的算法諸如多層前向網(wǎng)絡(luò)、支撐向量機(jī)等只是敘述了基本原理和最終結(jié)果,中間的推導(dǎo)過程并未給出,這些推導(dǎo)都可以在神經(jīng)網(wǎng)絡(luò)的經(jīng)典教程神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)中找到。(2)除了模式識(shí)別之外,神經(jīng)網(wǎng)絡(luò)的另一大功能是回歸擬合,但其實(shí)現(xiàn)和模式識(shí)別并沒有太大區(qū)別。比如將神經(jīng)網(wǎng)絡(luò)輸出層的激活函數(shù)變?yōu)榫€性激活函數(shù),用函數(shù)參數(shù)和值作為訓(xùn)練樣本即

23、可進(jìn)行回歸擬合。實(shí)際上,回歸擬合也可看成特殊的模式識(shí)別,每個(gè)參數(shù)作為一個(gè)模式,每個(gè)值作為一個(gè)類。(3)如果對(duì)結(jié)果的要求很高的話,僅僅只會(huì)簡(jiǎn)單調(diào)用庫(kù)函數(shù)應(yīng)該是不夠的,最好是自己能夠根據(jù)原理編出程序出來(lái),這樣才會(huì)對(duì)庫(kù)函數(shù)的各種參數(shù)有較深刻的認(rèn)識(shí)。7.附錄附錄1:BP算法字符識(shí)別matlab程序%用BP算法進(jìn)行字符識(shí)別tic;clear;clc;%提取字母信息alphabet,targets=prprob();alphabet=alphabet;infoLen=size(alphabet,2); %字母特征的維數(shù)% %使用交叉確認(rèn)法確定最佳神經(jīng)元個(gè)數(shù)% trainNum=20;% inputTrai

24、n=zeros(26*trainNum*2,infoLen);% inputVerify=zeros(26*trainNum*2,infoLen);% outputTrain=zeros(26*trainNum*2,26);% outputVerify=zeros(26*trainNum*2,26);% for i=1:26% inputTrain(i-1)*trainNum*2+1:i*trainNum*2,:)=repmat(alphabet(i,:),trainNum,1)+randn(trainNum,infoLen)*sqrt(0.1);.% repmat(alphabet(i,:)

25、,trainNum,1)+randn(trainNum,infoLen)*sqrt(0.2);% outputTrain(i-1)*trainNum*2+1:i*trainNum*2,:)=repmat(targets(i,:),trainNum*2,1);% inputVerify(i-1)*trainNum*2+1:i*trainNum*2,:)=repmat(alphabet(i,:),trainNum,1)+randn(trainNum,infoLen)*sqrt(0.1);.% repmat(alphabet(i,:),trainNum,1)+randn(trainNum,infoL

26、en)*sqrt(0.2);% outputVerify(i-1)*trainNum*2+1:i*trainNum*2,:)=repmat(targets(i,:),trainNum*2,1);% end% neuronNumArr=5,10,15,20,30,40;% bestNeuronNum=crossVerify(neuronNumArr,inputTrain,outputTrain,inputVerify,outputVerify);% fprintf(n最佳神經(jīng)元個(gè)數(shù)為:%dn,bestNeuronNum); %暫時(shí)得到的結(jié)果為40個(gè)%獲得訓(xùn)練數(shù)據(jù)trainNum=10;input

27、Train=zeros(26*trainNum*2,infoLen);outputTrain=zeros(26*trainNum*2,26);for i=1:26 inputTrain(i-1)*trainNum*2+1:i*trainNum*2,:)=repmat(alphabet(i,:),trainNum,1)+randn(trainNum,infoLen)*sqrt(0.1);. repmat(alphabet(i,:),trainNum,1)+randn(trainNum,infoLen)*sqrt(0.2); outputTrain(i-1)*trainNum*2+1:i*trai

28、nNum*2,:)=repmat(targets(i,:),trainNum*2,1);end%訓(xùn)練數(shù)據(jù)歸一化inputn,inputps=mapminmax(inputTrain); %歸一化是針對(duì)同一維的數(shù)據(jù)outputn,outputps=mapminmax(outputTrain);%BP神經(jīng)網(wǎng)絡(luò)構(gòu)建neuronNum=40;name=最佳神經(jīng)元個(gè)數(shù);net=newff(inputn,outputn,neuronNum,tansig,tansig,traingdx); %動(dòng)量反傳和動(dòng)態(tài)自適應(yīng)學(xué)習(xí)率的梯度下降訓(xùn)練函數(shù)%選取初始權(quán)值和閾值coef=0.01; %調(diào)整網(wǎng)絡(luò)初始值的系數(shù)net.

29、LW2,1=net.LW2,1*coef; net.b2=net.b2*coef; %網(wǎng)絡(luò)參數(shù)配置(迭代次數(shù),學(xué)習(xí)率,目標(biāo))net.trainParam.epochs=1000;net.trainParam.goal=0.00001;net.trainParam.mc=0.8;%BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練net=train(net,inputn,outputn);%獲得不同方差下的恢復(fù)率stdDevia=0:0.05:0.5;testLen=length(stdDevia);recoverRate=zeros(1,testLen);testNum=10;inputTest=zeros(26*testNu

30、m,infoLen);outputTest=zeros(26*testNum,26);for k=1:testLen for i=1:26 inputTest(i-1)*testNum+1:i*testNum,:)=repmat(alphabet(i,:),testNum,1)+randn(testNum,infoLen)*stdDevia(k); outputTest(i-1)*testNum+1:i*testNum,:)=repmat(targets(i,:),testNum,1); end inputnTest=mapminmax(apply,inputTest,inputps); %預(yù)

31、測(cè)數(shù)據(jù)歸一化 an=sim(net,inputnTest); %BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)輸出 bpOutput=mapminmax(reverse,an,outputps); %輸出結(jié)果反歸一化 ,indexTest=max(outputTest,2); %計(jì)算恢復(fù)率 ,indexBp=max(bpOutput,2); recoverRate(k)=length(find(indexTest=indexBp)/(26*testNum);endplot(stdDevia,recoverRate,- *); %繪制恢復(fù)率-方差圖像xlabel(標(biāo)準(zhǔn)差);ylabel(恢復(fù)率);name=name,BP算法

32、恢復(fù)率-標(biāo)準(zhǔn)差圖像;title(name);toc;附錄2:交叉確認(rèn)神經(jīng)元個(gè)數(shù)matlab程序%使用交叉確認(rèn)法確定最佳神經(jīng)元個(gè)數(shù)function bestNeuronNum=crossVerify(neuronNumArr,inputTrain,outputTrain,inputVerify,outputVerify)%訓(xùn)練數(shù)據(jù)歸一化inputn,inputps=mapminmax(inputTrain); %歸一化是針對(duì)同一維的數(shù)據(jù)outputn,outputps=mapminmax(outputTrain);%驗(yàn)證數(shù)據(jù)歸一化inputnVerify=mapminmax(apply,inpu

33、tVerify,inputps);%循環(huán)確定最佳神經(jīng)元個(gè)數(shù)maxRecoverRate=0;for i=1:length(neuronNumArr) neuronNum=neuronNumArr(i); net=newff(inputn,outputn,neuronNum,tansig,tansig,traingdx); %動(dòng)量反傳和動(dòng)態(tài)自適應(yīng)學(xué)習(xí)率的梯度下降訓(xùn)練函數(shù) net.trainParam.epochs=1000; %網(wǎng)絡(luò)參數(shù)配置(迭代次數(shù),學(xué)習(xí)率,目標(biāo)) net.trainParam.goal=0.00001; net.trainParam.mc=0.95; net=train(ne

34、t,inputn,outputn); %BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練 an=sim(net,inputnVerify); %BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)輸出 bpOutput=mapminmax(reverse,an,outputps); %輸出結(jié)果反歸一化 ,indexVerify=max(outputVerify,2); %計(jì)算恢復(fù)率 ,indexBp=max(bpOutput,1); indexBp=indexBp; recoverRate=length(find(indexVerify=indexBp)/(length(indexVerify); if recoverRatemaxRecoverRate ma

35、xRecoverRate=recoverRate; bestNeuronNum=neuronNum; end fprintf(n總共%d個(gè)完成了%d個(gè)n,length(neuronNumArr),i);endend附錄3:libsvm字符識(shí)別matlab程序%使用libsvm進(jìn)行字符識(shí)別tic;%提取字母信息alphabet,targets=prprob();alphabet=alphabet;infoLen=size(alphabet,2); %字母特征的維數(shù)%獲得數(shù)據(jù)和標(biāo)簽dataNum=40;data=zeros(26*dataNum*2,infoLen);label=zeros(26*

36、dataNum*2,1);for i=1:26 data(i-1)*dataNum*2+1:i*dataNum*2,:)=repmat(alphabet(i,:),dataNum,1)+randn(dataNum,infoLen)*sqrt(0.1);. repmat(alphabet(i,:),dataNum,1)+randn(dataNum,infoLen)*sqrt(0.2); label(i-1)*dataNum*2+1:i*dataNum*2,:)=repmat(i,dataNum*2,1);end%數(shù)據(jù)歸一化datan,dataps=mapminmax(data); %歸一化是針對(duì)

37、同一維的數(shù)據(jù)%建立libsvm模型model=svmtrain(label,datan,-q);%獲得不同方差下的恢復(fù)率stdDevia=0:0.05:0.5;testLen=length(stdDevia);recoverRate=zeros(1,testLen);testNum=10;testData=zeros(26*testNum,infoLen);testDataLabel=zeros(26*testNum,1);for k=1:testLen for i=1:26 testData(i-1)*testNum+1:i*testNum,:)=repmat(alphabet(i,:),t

38、estNum,1)+randn(testNum,infoLen)*stdDevia(k); testDataLabel(i-1)*testNum+1:i*testNum,:)=repmat(i,testNum,1); end testDatan=mapminmax(apply,testData,dataps); %預(yù)測(cè)數(shù)據(jù)歸一化 ,accuracy,=svmpredict(testDataLabel,testDatan,model,-q); recoverRate(k)=accuracy(1);endplot(stdDevia,recoverRate,- *); %繪制恢復(fù)率-方差圖像xlab

39、el(標(biāo)準(zhǔn)差);ylabel(恢復(fù)率);name=libsvm恢復(fù)率-標(biāo)準(zhǔn)差圖像;title(name);toc;附錄4:離散Hopfield字符識(shí)別matlab程序%用離散Hopfiled網(wǎng)絡(luò)做字符識(shí)別clear;clc;tic;%載入數(shù)據(jù)alphabet,=prprob();infoLen=size(alphabet,1); %字母特征的維數(shù)Q=3;A=alphabet(:,1);B=alphabet(:,2);C=alphabet(:,3);I=alphabet(:,9);J=alphabet(:,10);T=alphabet(:,21);data=I,J,T;data(data=0)=

40、-1;%獲得不同方差下的恢復(fù)率stdDevia=0:0.05:4;testLen=length(stdDevia);recoverRate=zeros(1,testLen);testNum=90;testData=zeros(infoLen,Q*testNum);testDataLabel=zeros(1,Q*testNum);maxIter=200; %設(shè)置迭代停止準(zhǔn)則toleration=1;for k=1:testLen for i=1:Q testData(:,(i-1)*testNum+1:i*testNum)=repmat(data(:,i),1,testNum)+randn(in

41、foLen,testNum)*stdDevia(k); testDataLabel(:,(i-1)*testNum+1:i*testNum)=repmat(i,1,testNum); end iter=0; while 1=1 %Hebb學(xué)習(xí)算法 cache=testData; testData=sign(data*(data*testData); testData(testData=0)=1; iter=iter+1; if length(find(cache=testData)=maxIter break; end end if iter=maxIter fprintf(n迭代已達(dá)到最大迭

42、代次數(shù)!n); else fprintf(n迭代已接近穩(wěn)定態(tài),迭代次數(shù)為:%dn,iter); end for pos=1:Q*testNum %計(jì)算恢復(fù)率 maxNum=-inf; for i=1:Q %判斷收斂最近的一個(gè)點(diǎn) num=length(find(data(:,i)=testData(:,pos); if nummaxNum maxNum=num; index=i; end end if index=testDataLabel(pos); recoverRate(k)=recoverRate(k)+1; end end recoverRate(k)=recoverRate(k)/(

43、Q*testNum);endplot(stdDevia,recoverRate,- *); %繪制恢復(fù)率-方差圖像xlabel(標(biāo)準(zhǔn)差);ylabel(恢復(fù)率);name=離散Hopfiled恢復(fù)率-標(biāo)準(zhǔn)差圖像;title(name);toc;附錄5:離散Hopfield圖像恢復(fù)matlab程序%利用離散Hopfield網(wǎng)絡(luò)做圖像恢復(fù)clear;clc;tic;%載入圖像數(shù)據(jù)imageSet=cell(1,10);imageSet1=imread(通訊錄圖片李柢穎臉部.jpg);imageSet2=imread(通訊錄圖片徐文豪臉部.jpg);imageSet3=imread(通訊錄圖片嚴(yán)沈晗

44、臉部.jpg);imageSet4=imread(通訊錄圖片朱文哲臉部.jpg);imageSet5=imread(通訊錄圖片韓霜臉部.jpg);imageSet6=imread(通訊錄圖片馬駱臉部.jpg);imageSet7=imread(通訊錄圖片蘇澤明臉部.jpg);imageSet8=imread(通訊錄圖片王天偉臉部.jpg);imageSet9=imread(通訊錄圖片李澤林臉部.jpg);imageSet10=imread(通訊錄圖片孫瑞林臉部.jpg);imageNum=3;lineNum=size(imageSet1,1);colNum=size(imageSet1,2);

45、data=zeros(lineNum*colNum*3,imageNum);infoLen=8;binData=zeros(lineNum*colNum*3*infoLen,imageNum);for i=1:imageNum data(:,i)=double(reshape(imageSeti(:,:,1),lineNum*colNum,1);reshape(imageSeti(:,:,2),lineNum*colNum,1);reshape(imageSeti(:,:,3),lineNum*colNum,1); tmp=dec2bin(data(:,i),8); %將灰度圖像轉(zhuǎn)為二進(jìn)制存儲(chǔ)

46、 binData(:,i)=str2num(reshape(tmp(1:infoLen,:),lineNum*colNum*3*infoLen,1); endbinData(binData=0)=-1;%生成加噪數(shù)據(jù)choice=2; %選擇第幾張圖片Amplitude=200;pollutedData=fix(data(:,choice)+Amplitude*randn(lineNum*colNum*3,1);pollutedData(pollutedData255)=255;tmp=dec2bin(pollutedData,8);testBinData=str2num(reshape(tm

47、p(1:infoLen,:),lineNum*colNum*3*infoLen,1);testBinData(testBinData=0)=-1;%還原圖像maxIter=100; %設(shè)置迭代停止準(zhǔn)則toleration=0;iter=0;while 1=1 cache=testBinData; testBinData=sign(binData*(binData*testBinData); testBinData(testBinData=0)=1; iter=iter+1; if length(find(cache=testBinData)=maxIter break; endendif it

48、er=maxIter fprintf(n迭代已達(dá)到最大迭代次數(shù)!n);else fprintf(n迭代已接近穩(wěn)定態(tài),迭代次數(shù)為:%dn,iter);end%各圖像作比較originImage=imageSetchoice; %原圖片pollutedImage=uint8(zeros(lineNum,colNum,3);pollutedImage(:,:,1)=uint8(reshape(pollutedData(1:lineNum*colNum),lineNum,colNum); %加噪圖片pollutedImage(:,:,2)=uint8(reshape(pollutedData(line

49、Num*colNum+1:2*lineNum*colNum),lineNum,colNum); pollutedImage(:,:,3)=uint8(reshape(pollutedData(2*lineNum*colNum+1:3*lineNum*colNum),lineNum,colNum); testBinData(testBinData=-1)=0;tmp=reshape(testBinData,infoLen,lineNum*colNum*3);testData=zeros(lineNum*colNum*3,1);base=0;for i=1:infoLen testData=tes

50、tData+tmp(:,i)*2(8-i); base=base+2(8-i);endrecoverImage=uint8(zeros(lineNum,colNum,3);recoverImage(:,:,1)=uint8(reshape(testData(1:lineNum*colNum),lineNum,colNum); %恢復(fù)圖片recoverImage(:,:,2)=uint8(reshape(testData(lineNum*colNum+1:2*lineNum*colNum),lineNum,colNum);recoverImage(:,:,3)=uint8(reshape(tes

51、tData(2*lineNum*colNum+1:3*lineNum*colNum),lineNum,colNum);subplot(221);imshow(originImage);title(原圖像);subplot(222);imshow(pollutedImage);title(加噪圖像);subplot(223);imshow(recoverImage);title(還原圖像);cutData=bitand(data,base*ones(size(data); %最佳匹配圖像matchError=abs(cutData-repmat(testData,1,imageNum);,ind

52、ex=min(sum(matchError);subplot(224);imshow(imageSetindex);title(最佳匹配圖像);toc;附錄6:遍歷求解TSP的matlab程序%用遍歷的方法求解TSP問題%由于調(diào)用matlab庫(kù)函數(shù)perms,只適合計(jì)算維數(shù)小于等于11的問題function route,minTotalDist=traversalTsp(distMat)%檢驗(yàn)距離矩陣有效性if size(distMat,1)=size(distMat,2) fprintf(n距離矩陣必須為方陣!n);elseif size(distMat,1)11 fprintf(n由于調(diào)用matlab庫(kù)函數(shù)perms,只適合計(jì)算維數(shù)小于11的問題!n);endn=size(distMat,1);%生成路徑中間n-1個(gè)元素的全排列矩陣startpoint=randi(n); %隨機(jī)設(shè)置起點(diǎn)和終點(diǎn)位置,使計(jì)算量減少n倍elements=1:startpoint-1,startpoint+

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論