姓名:王咫毅
學(xué)號:19021211150
【嵌牛導(dǎo)讀】在這個(gè)人工智能如日中天的時(shí)代津肛,神經(jīng)網(wǎng)絡(luò)異軍突起章喉,成為人們研究的熱點(diǎn)。如何自己動(dòng)手搭一個(gè)神經(jīng)網(wǎng)絡(luò)的模型身坐?使用python需要調(diào)用那些庫?要識別一個(gè)手寫體的數(shù)據(jù)集如何進(jìn)行操作落包?這將是本文討論的主要問題部蛇。
【嵌牛鼻子】mnist數(shù)據(jù)集 python 神經(jīng)網(wǎng)絡(luò)
【嵌牛提問】如何引用mnist數(shù)據(jù)集?使用什么樣的神經(jīng)網(wǎng)絡(luò)可以識別率更高咐蝇?
【嵌牛正文】
轉(zhuǎn)載自:http://www.reibang.com/p/f5ab24b24edb
點(diǎn)擊標(biāo)題下[異步社區(qū)]可快速關(guān)注
在本文中涯鲁,我們將進(jìn)一步探討一些使用Python神經(jīng)網(wǎng)絡(luò)識別手寫字符非常有趣的想法。如果只是想了解神經(jīng)網(wǎng)絡(luò)的基本知識有序,那不必閱讀本文,可以先閱讀《Python神經(jīng)網(wǎng)絡(luò)編程》前面2章節(jié)的內(nèi)容抹腿。
這是一個(gè)有趣的額外部分,所以節(jié)奏會稍微加快一些旭寿,但是我們?nèi)匀粐L試使用簡單的語言來解釋這些想法警绩。
?1.1 自己的手寫數(shù)字
在本文中,我們一直使用來自MNIST數(shù)據(jù)集的數(shù)字圖片盅称。為什么不使用自己的筆跡呢肩祥?
在這個(gè)實(shí)驗(yàn)中后室,我們將使用自己的筆跡創(chuàng)建測試數(shù)據(jù)集。我們也將嘗試使用不同的書寫風(fēng)格混狠,使用嘈雜或抖動(dòng)的圖片岸霹,來觀察神經(jīng)網(wǎng)絡(luò)的應(yīng)對能力如何。
你可以使用任何喜歡的圖像編輯或繪畫軟件來創(chuàng)建圖片将饺。不必使用昂貴的Photoshop贡避,GIMP是免費(fèi)開源的替代軟件,適用于Windows予弧、Mac和Linux等系統(tǒng)刮吧。甚至可以用一支筆將數(shù)字寫在紙上,并用智能手機(jī)桌肴、相機(jī)或任何合適的掃描儀庶橱,將手寫數(shù)字變成圖片格式氛琢。唯一的要求是圖片為正方形(寬度等于長度),并且將其保存為PNG格式。在喜歡的圖像編輯器中红碑,保存格式選項(xiàng)的菜單通常為“File→Save As”或“File→Export”。
下面是我制作的一些圖片撑螺。
?數(shù)字5就是我的筆跡吏砂。數(shù)字4是用粉筆而不是馬克筆寫的。數(shù)字3是我的筆跡并有意切成一段一段的拳魁。數(shù)字2是傳統(tǒng)的報(bào)紙或書籍字體惶桐,但是進(jìn)行了模糊處理。數(shù)字6有意做成抖動(dòng)的樣子潘懊,好像是在水中的倒影姚糊。最后一張圖片與前面的數(shù)字相同,但是添加了噪聲授舟,來看看我們是否可以增加神經(jīng)網(wǎng)絡(luò)的工作難度救恨。
雖然這很有趣,但是這里蘊(yùn)含了很嚴(yán)肅的一點(diǎn)释树。人類大腦在遭受損害后肠槽,其能力依然能夠得到良好發(fā)揮,科學(xué)家對此深感震驚奢啥。這暗示著秸仙,神經(jīng)網(wǎng)絡(luò)將它們所學(xué)到的知識分布在幾條鏈接權(quán)重上,也就是說桩盲,如果若干鏈接權(quán)重遭受了一定損害寂纪,神經(jīng)網(wǎng)絡(luò)也可以表現(xiàn)得相當(dāng)好。這同時(shí)意味著正驻,如果輸入圖像被損壞或不完整弊攘,神經(jīng)網(wǎng)絡(luò)也可以表現(xiàn)得相當(dāng)好抢腐。這是一種很強(qiáng)大的功能,這就是我們希望用上圖中斷斷續(xù)續(xù)的3進(jìn)行測試的能力襟交。
我們需要?jiǎng)?chuàng)建較小的PNG圖片迈倍,將它們調(diào)整到28個(gè)像素乘以28個(gè)像素,這樣就可以匹配曾經(jīng)用過的來自MNIST數(shù)據(jù)集的圖片捣域。你可以使用圖像編輯器做到這一點(diǎn)啼染。
Python庫再次幫助了我們,它從常見的圖像文件格式中(包括PNG格式)讀取和解碼數(shù)據(jù)焕梅〖6欤看看下面這段簡單的代碼:?
?scipy.misc.imread()函數(shù)幫助我們從圖像文件,如PNG或JPG文件中贞言,讀取數(shù)據(jù)斜棚。必須導(dǎo)入scipy.misc庫來使用這個(gè)函數(shù)。參數(shù)“flatten=True”將圖像變成簡單的浮點(diǎn)數(shù)數(shù)組该窗,如果圖像是彩色的弟蚀,那么顏色值將被轉(zhuǎn)換為所需要的灰度。
下一行代碼重塑數(shù)組酗失,將其從28×28的方塊數(shù)組變成很長的一串?dāng)?shù)值义钉,這是我們需要饋送給神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)。此前规肴,我們已經(jīng)多次進(jìn)行這樣的操作了捶闸。但是,這里比較新鮮的一點(diǎn)是將數(shù)組的值減去了255.0拖刃。這樣做的原因是删壮,常規(guī)而言,0指的是黑色兑牡,255指的是白色醉锅,但是,MNIST數(shù)據(jù)集使用相反的方式表示发绢,因此不得不將值逆轉(zhuǎn)過來以匹配MNIST數(shù)據(jù)。
最后一行代碼是我們很熟悉的垄琐,它將數(shù)據(jù)值進(jìn)行縮放边酒,使得它們的范圍變成0.01到1.0。演示讀取PNG文件的示例代碼可以在GitHub上找到:
我們需要?jiǎng)?chuàng)建基本的神經(jīng)網(wǎng)絡(luò)狸窘,這個(gè)神經(jīng)網(wǎng)絡(luò)使用MNIST訓(xùn)練數(shù)據(jù)集進(jìn)行訓(xùn)練墩朦,然后,不使用MNIST測試集對網(wǎng)絡(luò)進(jìn)行測試翻擒,而是使用自己創(chuàng)建的圖像數(shù)據(jù)對網(wǎng)絡(luò)進(jìn)行測試氓涣。
在GitHub上牛哺,可通過如下鏈接獲得新程序:
這樣做成功了嗎?當(dāng)然成功了劳吠。下圖總結(jié)使用我們自己制作的圖像查詢的結(jié)果引润。
?可以看到,神經(jīng)網(wǎng)絡(luò)能夠識別我們創(chuàng)建的所有圖像痒玩,包括有意損壞的數(shù)字“3”淳附。只有在識別添加了噪聲的數(shù)字“6”時(shí)失敗了。
使用你自己的圖像蠢古,尤其是手寫的圖像試試看奴曙,證明你的神經(jīng)網(wǎng)絡(luò)確實(shí)能夠工作。
并且草讶,仔細(xì)觀察洽糟,要將圖像損壞或變形到什么程度,神經(jīng)網(wǎng)絡(luò)才會失敗堕战。神經(jīng)網(wǎng)絡(luò)的彈性將會給你留下深刻的印象坤溃。
?1.2 神經(jīng)網(wǎng)絡(luò)大腦內(nèi)部
在求解各種各樣我們不知道如何使用簡約明快的規(guī)則解決的問題時(shí),神經(jīng)網(wǎng)絡(luò)發(fā)揮了重要作用践啄。想象一下浇雹,寫下一組規(guī)則,將這些規(guī)則應(yīng)用于手寫數(shù)字圖像屿讽,來確定數(shù)字是什么昭灵,這件事并不是那么容易,并且我們的嘗試也可能不會那么成功伐谈。
1.2.1 神秘的黑盒子
一旦神經(jīng)網(wǎng)絡(luò)得到了訓(xùn)練烂完,并且在測試數(shù)據(jù)上表現(xiàn)良好,那么基本上你就擁有了一個(gè)神秘的黑盒子诵棵。你不知道這個(gè)黑盒子如何計(jì)算出答案抠蚣,但是它確實(shí)成功地計(jì)算出了答案。
如果你只對答案感興趣履澳,而不真正關(guān)心它們?nèi)绾蔚贸鲞@個(gè)答案的嘶窄,那么對你來說,這就不是一個(gè)問題了距贷。但是柄冲,我要指出這是這些機(jī)器學(xué)習(xí)方法類型的缺點(diǎn),即雖然黑盒子(神經(jīng)網(wǎng)絡(luò))已經(jīng)學(xué)會如何求解問題忠蝗,但是其所學(xué)習(xí)到的知識常常不能轉(zhuǎn)化為對問題的理解和智慧现横。
讓我們來看看是否可以到神經(jīng)網(wǎng)絡(luò)內(nèi)部一探究竟,是否能夠理解神經(jīng)網(wǎng)絡(luò)所學(xué)習(xí)到的知識,將神經(jīng)網(wǎng)絡(luò)通過訓(xùn)練搜集到的知識可視化戒祠。
我們可以觀察權(quán)重骇两,這畢竟是神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的內(nèi)容。但是姜盈,權(quán)重不太可能告訴我們太多信息低千。特別是,神經(jīng)網(wǎng)絡(luò)的工作方式是將學(xué)習(xí)分布到不同的鏈接權(quán)重中贩据。這種方式使得神經(jīng)網(wǎng)絡(luò)對損壞具有了彈性栋操,這就像是生物大腦的運(yùn)行方式。刪除一個(gè)節(jié)點(diǎn)甚至相當(dāng)多的節(jié)點(diǎn)饱亮,都不太可能徹底破壞神經(jīng)網(wǎng)絡(luò)良好的工作能力矾芙。
這里有一個(gè)瘋狂的想法。
1.2.2 向后查詢
在通常情況下近上,我們饋送給已受訓(xùn)練的神經(jīng)網(wǎng)絡(luò)一個(gè)問題剔宪,神經(jīng)網(wǎng)絡(luò)彈出一個(gè)答案。在我們的例子中壹无,這個(gè)問題是人類的手寫數(shù)字圖像葱绒。答案是表示數(shù)字0到9中的某個(gè)標(biāo)簽。
如果將這種方式反轉(zhuǎn)斗锭,向后操作地淀,會發(fā)生什么呢?如果饋送一個(gè)標(biāo)簽到輸出節(jié)點(diǎn)岖是,通過已受訓(xùn)練的網(wǎng)絡(luò)反向輸入信號帮毁,直到輸入節(jié)點(diǎn)彈出一個(gè)圖像,那會怎么樣豺撑?下圖顯示了正常的正向查詢和瘋狂的反向向后查詢的想法烈疚。
?我們已經(jīng)知道如何通過網(wǎng)絡(luò)傳播信號,使用鏈接權(quán)重調(diào)節(jié)信號聪轿,在應(yīng)用激活函數(shù)之前在節(jié)點(diǎn)處重新組合信號爷肝。除了使用的是逆激活函數(shù)以外,所有這一切操作也都適用于反向傳播信號陆错。如果y= f(x) 是正向激活函數(shù)灯抛,那么這個(gè)函數(shù)的逆就是x= g(y)。使用簡單的代數(shù)音瓷,求出邏輯函數(shù)的逆牧愁,也并非難事:
y= 1 / (1 + e-x)
1 + e-x?= 1/y
e-x?= (1/y) -1 = (1 -y) /y
-x?= ln [ (1-y) /y]
x= ln [ y / (1-y) ]
這就是所謂的對數(shù)函數(shù),就像Python為邏輯S函數(shù)提供scipy.special.expit()一樣外莲,Python中的scipy.special庫也提供了這個(gè)函數(shù),即scipy.special.logit()。
在應(yīng)用逆激活函數(shù)logit()之前偷线,我們需要確保信號是有效的磨确。這是什么意思呢?還記得吧声邦,邏輯S函數(shù)接受了任何數(shù)值乏奥,輸出0和1之間的某個(gè)值,但是不包括0和1本身亥曹。逆函數(shù)必須接受相同的范圍0和1之間的某個(gè)值邓了,不包括0和1,彈出任何正值或負(fù)值媳瞪。為了實(shí)現(xiàn)這一目標(biāo)骗炉,我們簡單地接受輸出層中的所有值,應(yīng)用logit()蛇受,并將它們重新調(diào)整到有效范圍句葵。我選擇的范圍為0.01至0.99。
這段代碼在網(wǎng)上始終可用兢仰,請?jiān)L問GitHub以獲日д伞:
1.2.3 標(biāo)簽“0”
來看看如果我們使用標(biāo)簽“0”進(jìn)行反向查詢,會發(fā)生什么情況把将。也就是說轻专,我們向輸出節(jié)點(diǎn)展示了一些值,除了使用值0.99展示給第一個(gè)節(jié)點(diǎn)表示標(biāo)簽“0”察蹲,其余節(jié)點(diǎn)都展示了0.01请垛。換句話說,也就是數(shù)組[0.99, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,0.01]递览。
下圖顯示了輸入節(jié)點(diǎn)彈出的圖像叼屠。
?這真是太有趣了!
這個(gè)圖像讓我們對神經(jīng)網(wǎng)絡(luò)的“大腦”有了一種深刻的見解绞铃。這個(gè)圖像是什么意思镜雨?該如何解釋這個(gè)圖像呢?
我們注意到最主要的特征是儿捧,圖像中的圓形荚坞。我們是在詢問神經(jīng)網(wǎng)絡(luò)——對于答案“0”,最理想的問題是什么菲盾,因此颓影,這個(gè)圖像是有道理的。
我們也注意到深色懒鉴、淺色和一些介中的灰色區(qū)域诡挂。
·深色區(qū)域是問題圖像中應(yīng)該使用筆來標(biāo)記的部分碎浇,這部分圖像組成了支持證據(jù),證明答案為“0”璃俗,可以這樣理解奴璃,這些部分看起來組成了0的形狀輪廓。
·?淺色區(qū)域是問題圖像中應(yīng)該沒有任何筆痕的部分城豁,這支持了答案為“0”苟穆。同樣,可以這樣理解唱星,這些部分形成了0形狀的中間部分雳旅。
·?大體上,神經(jīng)網(wǎng)絡(luò)對灰色區(qū)域不是很敏感间聊。
因此攒盈,粗略來講,我們實(shí)際上已經(jīng)理解了甸饱,針對如何將圖像歸類為標(biāo)簽“0”沦童,神經(jīng)網(wǎng)絡(luò)已經(jīng)學(xué)習(xí)到的知識。
這是一種難得的見解叹话,對于較多層偷遗、較復(fù)雜的神經(jīng)網(wǎng)絡(luò)或較復(fù)雜的問題而言,可能沒有如此容易解釋的結(jié)果驼壶。我們鼓勵(lì)你進(jìn)行實(shí)驗(yàn)氏豌,親自動(dòng)手試一試。
1.2.4 更多的大腦掃描
下圖顯示了其他數(shù)字向后查詢的結(jié)果热凹。
?哇泵喘!同樣是一些非常有趣的圖像,就像使用超聲波掃描神經(jīng)網(wǎng)絡(luò)的大腦一樣般妙。
關(guān)于這些圖像纪铺,我們做了一些注解:
·“7”真的很清楚〉欤可以看到在查詢圖像中標(biāo)記的深色位置鲜锚,強(qiáng)烈暗示了這是標(biāo)簽“7”。也可以看到額外的“白色”區(qū)域苫拍,這些區(qū)域沒有任何標(biāo)記芜繁。這兩個(gè)特點(diǎn)結(jié)合起來,指示出了這是“7”绒极。
·?這同樣適用于數(shù)字“3”骏令,有標(biāo)記的深色區(qū)域指示出了“3”,白色的區(qū)域也非常清晰垄提。
·“2”和“5”具有類似的清晰度榔袋。
·?數(shù)字“4”有點(diǎn)有趣周拐,這個(gè)形狀出現(xiàn)在4個(gè)象限中,是4個(gè)互相分隔的區(qū)域摘昌。
·?“8”主要是由“雪人”構(gòu)成的速妖,這個(gè)“雪人”由白色區(qū)域形成,表明8的特征在于保持了“頭部和身體”區(qū)的標(biāo)記聪黎。
·?數(shù)字“1”令人相當(dāng)費(fèi)解。這看起來好像神經(jīng)網(wǎng)絡(luò)較多關(guān)注無需標(biāo)記的區(qū)域备恤,而較少關(guān)注需要標(biāo)記的區(qū)域稿饰。沒關(guān)系,這就是網(wǎng)絡(luò)從樣本中學(xué)到的知識露泊。
·?數(shù)字“9”一點(diǎn)都不清楚喉镰。它有一個(gè)明確的深色區(qū)域,還有一些形狀相對精細(xì)的白色區(qū)域惭笑。這就是神經(jīng)網(wǎng)絡(luò)所學(xué)習(xí)到的知識侣姆,總體來說,當(dāng)與網(wǎng)絡(luò)學(xué)會的其他數(shù)字結(jié)合時(shí)沉噩,這允許神經(jīng)網(wǎng)絡(luò)的表現(xiàn)達(dá)到了97.5%的準(zhǔn)確度捺宗。我們觀察一下這個(gè)圖片,并得出結(jié)論川蒙,有更多的培訓(xùn)樣本將有助于神經(jīng)網(wǎng)絡(luò)學(xué)到更清晰的“9”的模板蚜厉。
現(xiàn)在,你對神經(jīng)網(wǎng)絡(luò)大腦的工作方式應(yīng)該有了一個(gè)深刻的了解了吧畜眨。
?1.3 創(chuàng)建新的訓(xùn)練數(shù)據(jù):旋轉(zhuǎn)圖像
如果思考一下MNIST訓(xùn)練數(shù)據(jù)昼牛,你就會意識到,這是關(guān)于人們所書寫數(shù)字的一個(gè)相當(dāng)豐富的樣本集康聂。這里有各種各樣贰健、各種風(fēng)格的書寫,有的寫得很好恬汁,有的寫得很糟伶椿。
神經(jīng)網(wǎng)絡(luò)必須盡可能多地學(xué)習(xí)這些變化類型。在這里蕊连,有多種形式的數(shù)字“4”悬垃,有些被壓扁了,有些比較寬甘苍,有些進(jìn)行了旋轉(zhuǎn)尝蠕,有些頂部是開放的,有些頂部是閉合的载庭,這對神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)都是有幫助的看彼。
如果我們能夠創(chuàng)造更多的變化類型作為樣本廊佩,會不會有用處呢?如何做到這一點(diǎn)呢靖榕?再多收集幾千個(gè)人類手寫數(shù)字樣本标锄,對我們來說有點(diǎn)不太容易。我們可以這樣做茁计,但是工作量有點(diǎn)大料皇。
一個(gè)很酷的想法就是利用已有的樣本,通過順時(shí)針或逆時(shí)針旋轉(zhuǎn)它們星压,比如說旋轉(zhuǎn)10度践剂,創(chuàng)建新的樣本。對于每一個(gè)訓(xùn)練樣本而言娜膘,我們能夠生成兩個(gè)額外的樣本逊脯。我們可以使用不同的旋轉(zhuǎn)角度創(chuàng)建更多的樣本,但是竣贪,目前军洼,讓我們只嘗試+10和-10兩個(gè)角度,看看這種想法能不能成功演怎。
同樣匕争,Python的許多擴(kuò)展包和程序庫都很有用。ndimage.interpolation.rotate()可以將數(shù)組轉(zhuǎn)過一個(gè)給定的角度颤枪,這正是我們所需要的汗捡。請記住,由于我們將神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)成為接收一長串輸入信號畏纲,因此輸入的是784長的一串一維數(shù)字扇住。我們需要將這一長串?dāng)?shù)字重新變成28×28的數(shù)組,這樣就可以旋轉(zhuǎn)這個(gè)數(shù)組盗胀,然后在將這個(gè)數(shù)組饋送到神經(jīng)網(wǎng)絡(luò)之前艘蹋,將數(shù)組解開,重新變成一長串的784個(gè)信號票灰。
假設(shè)得到了先前的scaled_input數(shù)組女阀,下列代碼演示了如何使用ndimage.interpolation.rotate()函數(shù):?
?可以看到,原先的scaled_input數(shù)組被重新轉(zhuǎn)變?yōu)?8乘以 28的數(shù)組屑迂,然后進(jìn)行了調(diào)整浸策。reshape=False,這個(gè)參數(shù)防止程序庫過分“熱心”惹盼,將圖像壓扁庸汗,使得數(shù)組旋轉(zhuǎn)后可以完全適合,而沒有剪掉任何部分手报。在原始圖像中蚯舱,一些數(shù)組元素不存在改化,但是現(xiàn)在這些數(shù)組元素進(jìn)入了視野,cval就是用來填充數(shù)組元素的值枉昏。由于我們要移動(dòng)輸入值范圍陈肛,避免0作為神經(jīng)網(wǎng)絡(luò)的輸入值,因此不使用0.0作為默認(rèn)值兄裂,而是使用0.01作為默認(rèn)值句旱。
小型MNIST訓(xùn)練集的記錄6(第7條記錄)是一個(gè)手寫數(shù)字“1”。在下圖中可以看到晰奖,原先的數(shù)字圖片和使用代碼生成的兩個(gè)額外的變化形式前翎。
?可以清楚地看到這種方式的好處。原始圖像的版本旋轉(zhuǎn)+10度畅涂,提供了一個(gè)樣本,就像某些人的書寫風(fēng)格是將1向后傾斜道川。將原來圖片的版本順時(shí)針旋轉(zhuǎn)10度更有趣午衰。和原始的版本相比,這個(gè)版本在某種意義上是更具代表性的學(xué)習(xí)圖片冒萄。
讓我們創(chuàng)建新的Python Notebook臊岸,使用原來的神經(jīng)網(wǎng)絡(luò)代碼,不過尊流,現(xiàn)在我們將原始圖片朝順時(shí)針和逆時(shí)針兩個(gè)方向旋轉(zhuǎn)10度帅戒,作為額外的訓(xùn)練樣本,來訓(xùn)練神經(jīng)網(wǎng)絡(luò)崖技。這段代碼在GitHub上可以得到逻住,請?jiān)L問以下鏈接:
設(shè)定學(xué)習(xí)率為0.1,并且只使用一個(gè)訓(xùn)練世代迎献,初始運(yùn)行神經(jīng)網(wǎng)絡(luò)瞎访,所得的性能是0.9669。這對于沒有使用額外旋轉(zhuǎn)圖像進(jìn)行訓(xùn)練的神經(jīng)網(wǎng)絡(luò)的性能0.954而言吁恍,是一個(gè)長足的進(jìn)步扒秸。這樣的表現(xiàn),和列在Yann LeCeun網(wǎng)站中的記錄相比也已經(jīng)是名列前茅了冀瓦。
讓我們進(jìn)行一系列的實(shí)驗(yàn)伴奥,改變世代的數(shù)目看看是否能夠讓已經(jīng)不錯(cuò)的表現(xiàn)更上一層樓。現(xiàn)在翼闽,我們創(chuàng)建了更多的訓(xùn)練數(shù)據(jù)拾徙,可以采用更小、更謹(jǐn)慎的學(xué)習(xí)步長肄程,因此將學(xué)習(xí)率減少到0.01锣吼,這樣就總體上延長了學(xué)習(xí)時(shí)間选浑。
請記住,由于特定的神經(jīng)網(wǎng)絡(luò)架構(gòu)或訓(xùn)練數(shù)據(jù)的完整性玄叠,事情很可能存在內(nèi)在的限制古徒,因此我們不會期待得到98%或以上的準(zhǔn)確度,或者甚至是100%的準(zhǔn)確度读恃。我們說“特定的神經(jīng)網(wǎng)絡(luò)架構(gòu)”隧膘,意思是在每一層節(jié)點(diǎn)數(shù)目的選擇、隱藏層的選擇和激活函數(shù)的選擇等寺惫。
我們旋轉(zhuǎn)訓(xùn)練圖像的角度疹吃,將其作為額外的訓(xùn)練樣本,下圖顯示了在這種情況下的神經(jīng)網(wǎng)絡(luò)的性能西雀。同時(shí)萨驶,下圖也顯示了沒有使用額外旋轉(zhuǎn)的訓(xùn)練樣本時(shí)神經(jīng)網(wǎng)絡(luò)的性能,以便進(jìn)行簡單的比較艇肴。
?可以看到腔呜,在5個(gè)世代的情況下,最好的結(jié)果是0.9745或97.5%的準(zhǔn)確度再悼。這再一次打破了我們先前的紀(jì)錄核畴。
值得注意的是,如果旋轉(zhuǎn)的角度過大冲九,神經(jīng)網(wǎng)絡(luò)的性能會出現(xiàn)下降谤草。由于旋轉(zhuǎn)較大的角度意味著創(chuàng)建了實(shí)際上不能代表數(shù)字的圖像,因此神經(jīng)網(wǎng)絡(luò)的性能出現(xiàn)了下降莺奸,這是可以理解的丑孩。想象一下,將“3”向一個(gè)方向旋轉(zhuǎn)90度憾筏,這就不再是3了嚎杨。因此氧腰,將過度旋轉(zhuǎn)的圖像添加到訓(xùn)練樣本中箩帚,增加了錯(cuò)誤樣本,降低了訓(xùn)練的質(zhì)量是嗜。對于最大化附加數(shù)據(jù)的價(jià)值鹅搪,10度看起來是最佳角度。
在10個(gè)世代的情況下恢准,神經(jīng)網(wǎng)絡(luò)的性能出現(xiàn)了峰值,打破了記錄敏沉,達(dá)到了0.9787辅肾,幾乎到達(dá)98%!對于這種簡單的神經(jīng)網(wǎng)絡(luò)而言矫钓,這是一個(gè)驚人的結(jié)果概龄,也是最佳的一種狀態(tài)救欧。請記住铝耻,有些人會對神經(jīng)網(wǎng)絡(luò)或數(shù)據(jù)進(jìn)行一些巧妙的處理泡态,我們還未這樣做兽赁,我們只是保持簡單的神經(jīng)網(wǎng)絡(luò)亮钦,但是卻依然取得了令人驕傲的結(jié)果。
?做得好蚁滋!
?1.4 結(jié)語
在本文中宿接,我希望你已經(jīng)明白,人類能夠輕而易舉解決的一些問題辕录,對傳統(tǒng)計(jì)算機(jī)而言卻難以解決睦霎。圖像識別就是這些所謂的“人工智能”的挑戰(zhàn)之一。
神經(jīng)網(wǎng)絡(luò)使圖像識別以及廣泛的其他各類難題走诞,都獲得了空前的進(jìn)步副女。求解這類難題的早期動(dòng)力的一個(gè)關(guān)鍵性部分是生物大腦,如鴿子或昆蟲的大腦蚣旱,雖然這些生物大腦比起今天的超級計(jì)算機(jī)似乎簡單一些碑幅,反應(yīng)也較慢,但是它們依然能夠執(zhí)行復(fù)雜的任務(wù)塞绿,如飛行枕赵、喂食、建設(shè)家園位隶。這些生物大腦對損害或?qū)Σ煌昝赖男盘柨酱埽卜浅S袕椥浴?shù)字計(jì)算機(jī)和傳統(tǒng)計(jì)算卻不能擁有這種能力。
今天篮昧,在人工智能中赋荆,神經(jīng)網(wǎng)絡(luò)是一些神奇的應(yīng)用程序成功的關(guān)鍵部分。人們對神經(jīng)網(wǎng)絡(luò)和機(jī)器學(xué)習(xí)懊昨,特別是深度學(xué)習(xí)——也就是使用了有層次結(jié)構(gòu)的機(jī)器學(xué)習(xí)方法窄潭,依然充滿了巨大興趣。在2016年年初酵颁,在古老的圍棋對弈領(lǐng)域嫉你,谷歌的DeepMind擊敗了世界級大師。和國際象棋相比躏惋,圍棋需要更深入的戰(zhàn)略幽污,更加微妙,研究人員原本以為計(jì)算機(jī)需要好幾年的時(shí)間才能下得好圍棋簿姨。因此距误,此次事件成為了人工智能史上一個(gè)巨大的里程碑。神經(jīng)網(wǎng)絡(luò)在計(jì)算機(jī)的成功中發(fā)揮了關(guān)鍵作用扁位。
我希望你已經(jīng)明白了准潭,神經(jīng)網(wǎng)絡(luò)背后的核心思想其實(shí)是非常簡單的。我希望你也可以從神經(jīng)網(wǎng)絡(luò)的實(shí)驗(yàn)中找到樂趣域仇。也許刑然,你已經(jīng)有了探索其他類型的機(jī)器學(xué)習(xí)和人工智能的興趣。
如果你做到了這些事情暇务,那么我就算大功告成了闰集。
本文摘自《Python神經(jīng)網(wǎng)絡(luò)編程》
?《Python神經(jīng)網(wǎng)絡(luò)編程》
?[英]塔里克·拉希德(Tariq Rashid)?著?
點(diǎn)擊封面購買紙書
當(dāng)前,深度學(xué)習(xí)和人工智能的發(fā)展和應(yīng)用給人們留下了深刻的印象般卑。神經(jīng)網(wǎng)絡(luò)是深度學(xué)習(xí)和人工智能的關(guān)鍵元素,然而爽雄,真正了解神經(jīng)網(wǎng)絡(luò)工作機(jī)制的人少之又少蝠检。本書用輕松的筆觸,一步一步揭示了神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)思想挚瘟,并介紹如何使用Python 3.5編程語言開發(fā)神經(jīng)網(wǎng)絡(luò)叹谁。
本書將帶領(lǐng)您進(jìn)行一場妙趣橫生卻又有條不紊的旅行——從一個(gè)非常簡單的想法開始,逐步理解神經(jīng)網(wǎng)絡(luò)的工作機(jī)制乘盖。您無需任何超出中學(xué)范圍的數(shù)學(xué)知識焰檩,并且本書還給出易于理解的微積分簡介。本書的目標(biāo)是讓盡可能多的普通讀者理解神經(jīng)網(wǎng)絡(luò)订框。讀者將學(xué)習(xí)使用Python開發(fā)自己的神經(jīng)網(wǎng)絡(luò)析苫,訓(xùn)練它識別手寫數(shù)字,甚至可以與專業(yè)的神經(jīng)網(wǎng)絡(luò)相媲美。
本書適合想要了解深度學(xué)習(xí)衩侥、人工智能和神經(jīng)網(wǎng)絡(luò)的讀者閱讀国旷,尤其適合想要通過Python編程進(jìn)行神經(jīng)網(wǎng)絡(luò)開發(fā)的讀者參考。
作者:人郵異步社區(qū)
鏈接:http://www.reibang.com/p/f5ab24b24edb
來源:簡書
著作權(quán)歸作者所有茫死。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)跪但,非商業(yè)轉(zhuǎn)載請注明出處。