BP神經(jīng)網(wǎng)絡(luò)|手寫數(shù)字識(shí)別

整體思路:模型搭建--訓(xùn)練--測(cè)試--優(yōu)化

搭建基本模型階段:

step1:引入要用的包

step2:定義神經(jīng)網(wǎng)絡(luò)

step3:定義正向傳播訓(xùn)練過(guò)程

step4:定義反向傳播過(guò)程--更新權(quán)重

step5:查詢網(wǎng)絡(luò)--輸入數(shù)據(jù)端壳、返回輸出

step6:設(shè)定各層數(shù)量和參數(shù)

模型訓(xùn)練階段

模型測(cè)試階段

模型準(zhǔn)度計(jì)算以及后續(xù)優(yōu)化


一星著、搭建基本模型階段:

step1 導(dǎo)入后面需要用到的包:

為了方便,numpy簡(jiǎn)記為np,scipy.special簡(jiǎn)記為ss

numpy包的各種用法:https://blog.csdn.net/cxmscb/article/details/54583415 (非常詳細(xì))

scipy包的知識(shí):http://www.reibang.com/p/6c742912047f

tqdm:Tqdm 是 Python 進(jìn)度條庫(kù)闯参,可以在 Python 長(zhǎng)循環(huán)中添加一個(gè)進(jìn)度提示信息用法

step2:定義神經(jīng)網(wǎng)絡(luò)

解釋:

涉及到屬性的調(diào)用,詳細(xì)知識(shí)點(diǎn)請(qǐng)移步:http://www.reibang.com/writer#/notebooks/4844988/notes/58754235

inputNodes為輸入層牲芋,hiddenNodes為隱層剑梳,outputNodes為輸出層,learingRate為學(xué)習(xí)率

w_ih為輸入層與隱層之間的權(quán)重谣蠢; w_ho為隱層到輸出層的權(quán)重

正態(tài)分布的隨機(jī)數(shù)產(chǎn)生

numpy.random.normal(loc=0.0,scale=1.0, size=None)

loc:float 此概率分布的均值(對(duì)應(yīng)著整個(gè)分布的中心centre)

scale:float? 此概率分布的標(biāo)準(zhǔn)差(對(duì)應(yīng)于分布的寬度粟耻,scale越大越矮胖,scale越小眉踱,越瘦高)

size:int or tuple of ints? ? 輸出的shape挤忙,默認(rèn)為None,只輸出一個(gè)值

pow() 方法返回 xy(x的y次方) 的值谈喳;

lambda表達(dá)式册烈,通常是在需要一個(gè)函數(shù),但是又不想費(fèi)神去命名一個(gè)函數(shù)的場(chǎng)合下使用婿禽,也就是指匿名函數(shù)赏僧。

expit函數(shù)大猛,也稱為logistic sigmoid函數(shù),定義為expit(x)= 1 /(1 + exp(-x))淀零。 它是logit函數(shù)的反函數(shù)挽绩。


step3:定義正向傳播訓(xùn)練過(guò)程

解釋:

inputs=np.array(inputlist,ndmin=2).T 初始輸入值為輸入列的二維矩陣數(shù)據(jù)。.T就是轉(zhuǎn)置驾中,簡(jiǎn)單來(lái)說(shuō)將x和y值交換唉堪。后面targets同理。

hiddenInput=np.dot(self.w_ih,inputs) 隱藏層輸入值為權(quán)重和初始輸入值的矩陣積

numpy.dot用法詳見(jiàn):https://www.cnblogs.com/luhuan/p/7925790.html

self.activate 為激活函數(shù)方法的調(diào)用 肩民,每次輸出時(shí)唠亚,符合閾值條件的將觸發(fā)激活函數(shù)。

step4:定義反向傳播過(guò)程--更新權(quán)重

權(quán)重更新的公式


step5:查詢網(wǎng)絡(luò)--輸入數(shù)據(jù)持痰、返回輸出


這里就是實(shí)際輸入數(shù)據(jù)了灶搜,然后根據(jù)數(shù)據(jù)得到模型預(yù)測(cè)出來(lái)的值。

step6:設(shè)定各層數(shù)量和參數(shù)


神經(jīng)網(wǎng)絡(luò)由輸入層共啃、隱層占调、輸出層、學(xué)習(xí)率四個(gè)參數(shù)構(gòu)成

inputNodes: 輸入層的數(shù)量移剪,取決于輸入圖片(訓(xùn)練和識(shí)別)的像素究珊,像素點(diǎn)的數(shù)量等于輸入層的數(shù)量

hiddenNodes: 隱藏層的數(shù)量,一般比輸入層少纵苛,但具體不確定剿涮,可根據(jù)準(zhǔn)確率進(jìn)行調(diào)整

outputNodes: 輸出層的數(shù)量,等于需要分類的數(shù)量攻人。

學(xué)習(xí)率越大取试,每次學(xué)習(xí)變化越大,改變的越多怀吻,但接近準(zhǔn)確點(diǎn)時(shí)無(wú)法準(zhǔn)確到達(dá)

學(xué)習(xí)率越小瞬浓,每次學(xué)習(xí)更改的參數(shù)值就越小,只有大量的數(shù)據(jù)才能習(xí)得準(zhǔn)確值

需要注意的是:在89個(gè)訓(xùn)練集和11個(gè)測(cè)試集下蓬坡,inputNodes=307200才能跑猿棉。后續(xù)加大訓(xùn)練集和測(cè)試集,分別達(dá)到6萬(wàn)和2萬(wàn)的時(shí)候屑咳,inputNodes=784.


二萨赁、模型訓(xùn)練階段


多次利用相同的數(shù)據(jù)訓(xùn)練:tqdm.tqdm一共5個(gè),每次更新1個(gè)兆龙,一共更新5次

tqbar:遍歷循環(huán)每個(gè)圖片的數(shù)據(jù)矩陣杖爽,一共100個(gè),每次更新1個(gè),一共更新100次

圖像處理為什么轉(zhuǎn)換為double類型慰安?詳見(jiàn):https://blog.csdn.net/mine_land/article/details/79947734

numpy.asfarrary用法詳見(jiàn):https://docs.scipy.org/doc/numpy/reference/generated/numpy.asfarray.html

numpy.zeros(outputNodes)返回一個(gè)給定形狀和類型的用0填充的數(shù)組腋寨;詳見(jiàn):https://blog.csdn.net/qq_26948675/article/details/54318917

輸入數(shù)據(jù)x設(shè)置為0-1,最正確的目標(biāo)值y整數(shù)形式設(shè)置為0.99


三泻帮、模型測(cè)試階段

測(cè)試圖片用逗號(hào)分隔精置,輸出的的識(shí)別答案就是Y值计寇,即[0]的索引值锣杂。將測(cè)試輸入轉(zhuǎn)換為double的形式。將測(cè)試集數(shù)據(jù)輸入查詢網(wǎng)絡(luò)中得到replyOutput.

numpy.argmax輸出的是矩陣的最大值的索引值番宁。如果預(yù)測(cè)值正確元莫,則輸出1,如果預(yù)測(cè)值不正確蝶押,則輸出0.

四踱蠢、優(yōu)化階段:

首先測(cè)試準(zhǔn)確度

在以上的參數(shù)下,我們只能得到0.45的準(zhǔn)確率棋电,準(zhǔn)確率如此之低茎截,我們需要進(jìn)行優(yōu)化。

我的優(yōu)化方方案如下

主要是調(diào)整:訓(xùn)練次數(shù)赶盔、隱層數(shù)量企锌、測(cè)試集和訓(xùn)練集的數(shù)量、學(xué)習(xí)率

調(diào)試方法1 在其他條件不變的前提下于未,調(diào)整迭代次數(shù)和隱層數(shù)量

調(diào)試方法2 在其他條件不變的前提下撕攒,調(diào)整學(xué)習(xí)率和隱層數(shù)量

調(diào)試方法3 根據(jù)前面得到的最優(yōu)組合進(jìn)一步研究

調(diào)試方法4 將訓(xùn)練集和測(cè)試集擴(kuò)大




調(diào)試方法1? 在其他條件不變的前提下,調(diào)整迭代次數(shù)和隱層數(shù)量


測(cè)試集為11烘浦,訓(xùn)練集為89抖坪,學(xué)習(xí)率為0.1

通過(guò)上圖我們可以得到結(jié)論:在訓(xùn)練集和測(cè)試集較小的時(shí)候,搭配0.1的學(xué)習(xí)率闷叉,我們無(wú)論如何改變隱層數(shù)量和迭代數(shù)擦俐,都無(wú)法提升準(zhǔn)確率。

有空白的原因:已經(jīng)測(cè)了19次了握侧,準(zhǔn)確率仍然無(wú)法上升蚯瞧,提示著我們需要轉(zhuǎn)換思路。

那么接下來(lái)提升準(zhǔn)確率就將往:擴(kuò)大訓(xùn)練集藕咏、測(cè)試集的數(shù)量或者改變學(xué)習(xí)率 這兩個(gè)方面探索状知。

接下來(lái)我們先嘗試改變學(xué)習(xí)率。



調(diào)試方法2 在其他條件不變的前提下孽查,調(diào)整學(xué)習(xí)率和隱層數(shù)量

測(cè)試集為11饥悴,訓(xùn)練集為89,迭代次數(shù)為5

通過(guò)上圖我們發(fā)現(xiàn),在學(xué)習(xí)率為0.005的條件下西设,平均準(zhǔn)度在所測(cè)范圍內(nèi)達(dá)到了最高瓣铣。同時(shí)在0.001的學(xué)習(xí)率下,產(chǎn)生了目前最高的準(zhǔn)確度0.82贷揽。并且這兩者的平均準(zhǔn)度也達(dá)到了0.6以上棠笑,已經(jīng)較調(diào)試方法1的準(zhǔn)確率有了0.2以上的增幅了。

綜上禽绪,我們得到了兩個(gè)比較合適的學(xué)習(xí)率:0.005和0.001蓖救。

同時(shí),我們可以推測(cè):在上述條件下印屁,當(dāng)層數(shù)達(dá)到150以上循捺,準(zhǔn)確度會(huì)有比較不錯(cuò)的表現(xiàn)



調(diào)試方法3 根據(jù)前面得到的最優(yōu)組合進(jìn)一步研究

我們選取隱層層數(shù)在200和300并且在0.001學(xué)習(xí)率的條件下,研究迭代數(shù)對(duì)于目前最優(yōu)的參數(shù)組合影響大不大雄人。(訓(xùn)練集為89从橘,測(cè)試集為11)

學(xué)習(xí)率為0.001

同時(shí)我們?cè)倩仡櫼幌抡{(diào)試方法1的結(jié)果:

學(xué)習(xí)率為0.1


從這兩個(gè)表格,我們可以得出結(jié)論:學(xué)習(xí)率在0.001和0.1時(shí)础钠,和訓(xùn)練集為89恰力、測(cè)試集為11時(shí),改變迭代次數(shù)對(duì)于準(zhǔn)確率的影響不大旗吁。

我們可以推測(cè):在測(cè)試集和訓(xùn)練集的數(shù)量較少的情況下踩萎,迭代數(shù)的增加對(duì)于準(zhǔn)確度的提升幫助不大。

至此阵漏,學(xué)習(xí)率的影響驻民、迭代數(shù)的影響、隱層層數(shù)的影響我們都已經(jīng)討論過(guò)了履怯。那么接下來(lái)我們的方向是:改變訓(xùn)練集和測(cè)試集的數(shù)量大小回还。



調(diào)試方法4 將訓(xùn)練集和測(cè)試集擴(kuò)大

前面的調(diào)試方法留給我們的疑問(wèn):

①當(dāng)擴(kuò)大了訓(xùn)練集和測(cè)試集后,迭代數(shù)的改變對(duì)于準(zhǔn)確度的影響大不大叹洲?

②當(dāng)擴(kuò)大了訓(xùn)練集集和測(cè)試集后柠硕,學(xué)習(xí)率的改變和隱層數(shù)量的改變的影響又是如何?

在這里首先感謝劉繼端同學(xué)提供的2萬(wàn)測(cè)試集和6萬(wàn)訓(xùn)練集运提。

疑問(wèn)1解答:

在擴(kuò)大后的訓(xùn)練集和測(cè)試集下蝗柔,迭代次數(shù)的變化對(duì)于準(zhǔn)確度的變化影響在0.1之內(nèi)。這對(duì)于找到0.99的準(zhǔn)確度還是挺有幫助的民泵,但對(duì)于0.9以下的準(zhǔn)確率提升作用不大癣丧。

疑問(wèn)2解答:

根據(jù)上表,我們可以看出在其他條件不變的情況下栈妆,隱層數(shù)量越多胁编,準(zhǔn)確度越高厢钧。同時(shí),在充分大的訓(xùn)練集和測(cè)試集的前提下下嬉橙,學(xué)習(xí)率越高(但不宜過(guò)高)早直,準(zhǔn)確度越高。

因此市框,在擴(kuò)大了訓(xùn)練集和測(cè)試集之后霞扬,模型的準(zhǔn)確度有了質(zhì)的飛躍。另外枫振,準(zhǔn)確度在隱層數(shù)量300-400之間喻圃,學(xué)習(xí)率為0.05-0.1之間準(zhǔn)確度會(huì)有比較不錯(cuò)的表現(xiàn)。



五蒋得、調(diào)試結(jié)果

通過(guò)多次測(cè)試级及,我們發(fā)現(xiàn)訓(xùn)練次數(shù)、隱層數(shù)量额衙、測(cè)試集和訓(xùn)練集的數(shù)量、學(xué)習(xí)率這四個(gè)是影響準(zhǔn)確率的主要因素怕吴。其中訓(xùn)練次數(shù)的影響力對(duì)比其他三個(gè)因素較小窍侧。訓(xùn)練集和測(cè)試集的數(shù)量影響最大。

總的來(lái)說(shuō):

①我們發(fā)現(xiàn)隱層的增加確實(shí)能增加準(zhǔn)確率转绷。但這需要合適的訓(xùn)練次數(shù)配合和學(xué)習(xí)率的配合伟件。并不是隱層越多、學(xué)習(xí)率越大议经、訓(xùn)練次數(shù)越多就能增加準(zhǔn)確率斧账。

②充分大的訓(xùn)練集和測(cè)試集對(duì)于準(zhǔn)確度的提升至關(guān)重要

最終煞肾,基于以上調(diào)試方法咧织,我調(diào)試的的最佳參數(shù)為:


最優(yōu)準(zhǔn)確率為:

盡力了還是沒(méi)能調(diào)試到0.99.

代碼地址:https://gitee.com/kristina666/test.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市籍救,隨后出現(xiàn)的幾起案子习绢,更是在濱河造成了極大的恐慌,老刑警劉巖蝙昙,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闪萄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡奇颠,警方通過(guò)查閱死者的電腦和手機(jī)败去,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)烈拒,“玉大人圆裕,你說(shuō)我怎么就攤上這事三椿。” “怎么了葫辐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵搜锰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我耿战,道長(zhǎng)蛋叼,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任剂陡,我火速辦了婚禮狈涮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸭栖。我一直安慰自己歌馍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布晕鹊。 她就那樣靜靜地躺著松却,像睡著了一般。 火紅的嫁衣襯著肌膚如雪溅话。 梳的紋絲不亂的頭發(fā)上晓锻,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音飞几,去河邊找鬼砚哆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛屑墨,可吹牛的內(nèi)容都是我干的躁锁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼卵史,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼战转!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起程腹,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤匣吊,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后寸潦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體色鸳,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年见转,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了命雀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斩箫,死狀恐怖吏砂,靈堂內(nèi)的尸體忽然破棺而出撵儿,到底是詐尸還是另有隱情,我是刑警寧澤狐血,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布淀歇,位于F島的核電站,受9級(jí)特大地震影響匈织,放射性物質(zhì)發(fā)生泄漏浪默。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一缀匕、第九天 我趴在偏房一處隱蔽的房頂上張望纳决。 院中可真熱鬧,春花似錦乡小、人聲如沸阔加。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)胜榔。三九已至,卻和暖如春零远,著一層夾襖步出監(jiān)牢的瞬間苗分,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工牵辣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奴饮。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓纬向,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親戴卜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逾条,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345