學(xué)什么
這篇學(xué)習(xí)筆記對(duì)應(yīng) Udacity 無(wú)人駕駛工程師課程的 5-8 課绣硝,在這四課組成的第一個(gè)項(xiàng)目里拓提,主要教學(xué)了神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)知識(shí)停蕉。使用的例子是「交通標(biāo)識(shí)識(shí)別」勺三。
深入神經(jīng)網(wǎng)絡(luò)
無(wú)人駕駛技術(shù)在近幾年的快速崛起很大程度上得益于神經(jīng)網(wǎng)絡(luò)的快速發(fā)展雷滚。這一章節(jié)的跨度實(shí)在是非常大,從 BP 神經(jīng)網(wǎng)絡(luò)的入門到卷積神經(jīng)網(wǎng)絡(luò)吗坚,又到神經(jīng)網(wǎng)絡(luò)的一些細(xì)節(jié)問(wèn)題祈远,例如 one-hot 編碼與 softmax 函數(shù),再到 tensorflow 框架的基礎(chǔ)使用商源。自底向上的學(xué)習(xí)路徑使得知識(shí)掌握非常扎實(shí)车份,但緊湊的課程也讓很多學(xué)員有點(diǎn)接受不能。而對(duì)于已經(jīng)熟悉神經(jīng)網(wǎng)絡(luò)的學(xué)員來(lái)說(shuō)牡彻,里面的一些例題需要一些枯燥的計(jì)算扫沼,還挺打斷學(xué)習(xí)的節(jié)奏的。
關(guān)于神經(jīng)網(wǎng)絡(luò)的入門,如果覺(jué)得第五章太過(guò)簡(jiǎn)單跳過(guò)缎除,影響到后面的學(xué)習(xí)的話严就,我這里推薦一個(gè)我很喜歡的 Youtuber 3Blue1Brown 的 Neural Networks 課程 Youtube Bilibili 官方漢化。學(xué)習(xí)這部分內(nèi)容還需要有一定線性代數(shù)知識(shí)器罐,你可以在 Udacity 的無(wú)人駕駛的入門課程中學(xué)習(xí)到盈蛮,3Blue1Brown 也有一套可視化做得很棒的線性代數(shù)課程 Youtube Bilibili。如果你很熟悉這兩塊內(nèi)容技矮,那么第五章內(nèi)容就可以很快跳過(guò)。
卷積神經(jīng)網(wǎng)絡(luò)在圖像識(shí)別領(lǐng)域已經(jīng)可以說(shuō)是非常常用的技術(shù)了殊轴,作為最簡(jiǎn)單的例子衰倦,你可以看卷積網(wǎng)絡(luò)之父 Yann Lecun 的網(wǎng)站。Lecun 先生 1988 年在貝爾實(shí)驗(yàn)室工作室旁理,為了實(shí)現(xiàn)手寫(xiě)識(shí)別樊零,引入了卷積神經(jīng)網(wǎng)絡(luò)模型。LeNet-5 的模型雖然稱之為卷積神經(jīng)網(wǎng)絡(luò)孽文,但其實(shí)結(jié)構(gòu)極其簡(jiǎn)單驻襟,非常適合作為入門的例子。
至于 softmax 和 one-hot 編碼芋哭,如果有用過(guò) Matlab 之類做過(guò)研究的同學(xué)應(yīng)該很熟悉了沉衣,一言以蔽之就是:
, for j = 1, …, K.
對(duì)這個(gè)函數(shù)的感性理解就是,我們把每個(gè)分類都給出一個(gè) 0-1 之間的概率减牺,softmax 能約束每個(gè)分類的概率都在 (0, 1) 之間豌习,且所有項(xiàng)和為 1,是解決分類問(wèn)題的常見(jiàn)手段拔疚。
至于 tensorflow 庫(kù)的具體使用肥隆,我建議直接看 Google TensorFlow 的 Tutorials。Google 家的東西眾所周知都是讓 Google 自己用得爽的東西稚失,API 有的時(shí)候不是特別穩(wěn)定栋艳,而 Udacity 課程的篇幅有限,也不能很具體的解釋細(xì)節(jié)句各。
項(xiàng)目設(shè)計(jì)
回到解決這個(gè)識(shí)別交通標(biāo)識(shí)的問(wèn)題上吸占,項(xiàng)目提供了一些 pickle 文件作為訓(xùn)練集、測(cè)試集和驗(yàn)證集凿宾,這里有一個(gè)小坑:
pickle
庫(kù)在 Python 中保證其向后兼容和跨平臺(tái)兼容旬昭,但在實(shí)際使用中有遇到過(guò) pickle
在 Windows 操作系統(tǒng)上嚴(yán)重的問(wèn)題。雖然我不用 Windows菌湃,但是對(duì)所有其它學(xué)員做個(gè)提醒好了问拘。
我的預(yù)處理方式和網(wǎng)絡(luò)非常粗暴,畢竟圖像識(shí)別在今天的神經(jīng)網(wǎng)絡(luò)研究中已經(jīng)不算什么新鮮事了。我使用 OpenCV 簡(jiǎn)單對(duì)圖片都進(jìn)行了降采樣骤坐,然后降低了對(duì)比度绪杏,每次訓(xùn)練時(shí)做一次隨機(jī)打散。然后對(duì) LeNet-5 進(jìn)行了一些簡(jiǎn)單的優(yōu)化就基本滿足課程項(xiàng)目的要求了纽绍。
不過(guò)有兩個(gè)事情我沒(méi)有嘗試過(guò)蕾久,如果其它學(xué)員有多時(shí)間的話可以試一試。一個(gè)是使用 AutoKeras 這樣的項(xiàng)目拌夏,通過(guò)神經(jīng)網(wǎng)絡(luò)自動(dòng)架構(gòu)搜索 (ENAS)僧著,理論上可以一鍵建出我們需要的分類網(wǎng)絡(luò)。另外一個(gè)是障簿,我懷疑如果我們使用非常深的網(wǎng)絡(luò)像是 DenseNet盹愚,由于訓(xùn)練集只有 100MB,個(gè)人認(rèn)為會(huì)很容易產(chǎn)生過(guò)擬合站故,所以也沒(méi)有太冒進(jìn)皆怕。如果有同學(xué)試一下有結(jié)果的話可以發(fā)在評(píng)論里哦~
不過(guò)雖然我說(shuō)著容易,對(duì)于第一次接觸 TensorFlow 的同學(xué)來(lái)說(shuō)西篓,要想把那么多東西一次消化調(diào)通還是一個(gè)挺難的事情愈腾。我個(gè)人認(rèn)為這個(gè)項(xiàng)目對(duì)于剛開(kāi)始接觸神經(jīng)網(wǎng)絡(luò)框架的來(lái)說(shuō)有一點(diǎn)偏難,個(gè)人建議如果在第六課后加一個(gè)比較正式的 Project岂津,而不是一個(gè)簡(jiǎn)單的 Quiz虱黄,先能跑通整個(gè)工作流,再來(lái)做具體的圖像識(shí)別會(huì)更容易一些吮成。
另外礁鲁,Udacity 雖然含有一個(gè) GPU 實(shí)例的 Workspace,一方面 Workspace 服務(wù)在國(guó)內(nèi)不是很穩(wěn)定赁豆。另一方面是仅醇,一共只有 50 小時(shí),而且不停需要手動(dòng)開(kāi)關(guān)魔种。如果有條件的話析二,我建議還是本地找個(gè)能簡(jiǎn)單跑 CUDA 顯卡的機(jī)器吧。像是這次的如果只是 LeNet-5 的話节预,CPU 也夠跑了叶摄,但對(duì)于之后的課程,可能會(huì)有更復(fù)雜更依賴 GPU 的課程內(nèi)容出現(xiàn)安拟,大家也要提前做好準(zhǔn)備蛤吓。
工商時(shí)間
如果你也想報(bào)名 Udacity 的課程可以從 這里 報(bào)名,購(gòu)買任何課程(除小程序開(kāi)發(fā))使用 delton0416 作為優(yōu)惠碼可以獲得 300 元的折扣糠赦。