0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

三種典型的神經(jīng)網(wǎng)絡(luò)以及深度學(xué)習(xí)中的正則化方法應(yīng)用于無人駕駛

8g3K_AI_Thinker ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2018-06-03 09:27 ? 次閱讀

蘭州大學(xué)在讀碩士研究生,主攻無人駕駛,深度學(xué)習(xí);蘭大未來計(jì)算研究院無人車團(tuán)隊(duì)骨干,在改自己的無人車,參加過很多無人車Hackathon,喜歡極限編程

在前幾十年,神經(jīng)網(wǎng)絡(luò)并沒有受到人們的重視,直到深度學(xué)習(xí)的出現(xiàn),人們利用深度學(xué)習(xí)解決了不少實(shí)際問題(即一些落地性質(zhì)的商業(yè)應(yīng)用),神經(jīng)網(wǎng)絡(luò)才成為學(xué)界和工業(yè)界關(guān)注的一個(gè)焦點(diǎn)。本文以盡可能直白,簡(jiǎn)單的方式介紹深度學(xué)習(xí)中三種典型的神經(jīng)網(wǎng)絡(luò)以及深度學(xué)習(xí)中的正則化方法。為后面在無人駕駛中的應(yīng)用做鋪墊。

▌深度學(xué)習(xí)的能力

近期在學(xué)術(shù)領(lǐng)域存在這許多批判深度學(xué)習(xí)的言論(參考Gary Marcus的文章:https://arxiv.org/ftp/arxiv/papers/1801/1801.00631.pdf),深度學(xué)習(xí)在一些學(xué)者看來并不是通往通用人工智能的道路。但是,作為關(guān)注行業(yè)應(yīng)用的研究者和工程師,我們并不需要關(guān)注深度學(xué)習(xí)到底是不是通往最終的通用人工智能的道路,我們只需要知道,深度學(xué)習(xí)到底能不能夠解決我們行業(yè)的一些問題(通過傳統(tǒng)的軟件工程很難解決的問題)?答案是能,正是因?yàn)樯疃葘W(xué)習(xí)有著這樣的能力,它才成為人工智能研究領(lǐng)域歷史上第一次為各大商業(yè)公司追逐的技術(shù)(以往的人工智能大多是實(shí)驗(yàn)室產(chǎn)品,從未吸引巨頭的大量資本投入)。商業(yè)公司追逐利益,追逐商業(yè)化,一項(xiàng)技術(shù)能夠?yàn)闃I(yè)內(nèi)大量公司熱捧,說明其已經(jīng)具備在某些應(yīng)用行業(yè)商業(yè)化,產(chǎn)品化的能力,那么我們首先來了解一下深度學(xué)習(xí)現(xiàn)在已經(jīng)具備的“產(chǎn)品力”:

圖像識(shí)別與分類

傳統(tǒng)的計(jì)算機(jī)視覺技術(shù)在處理圖像識(shí)別問題時(shí)往往需要人為設(shè)計(jì)特征,要識(shí)別不同的類別,就要設(shè)計(jì)不同的特征,要識(shí)別貓和狗,就要分別為貓和狗設(shè)計(jì)特征,而這個(gè)過程是非常麻煩的,我們以貓和狗為例:

上圖是貓和狗的照片,可以說,光是為貓和狗兩個(gè)類別的識(shí)別設(shè)計(jì)特征就需要耗費(fèi)大量的精力,并且還得是“貓狗專家”才能做這件事情。那么,當(dāng)要識(shí)別的類別上升到1000類的時(shí)候呢?傳統(tǒng)的視覺算法的識(shí)別精度將會(huì)更低。

深度學(xué)習(xí)取得的第一個(gè)重大的突破就在ImageNet的識(shí)別挑戰(zhàn)上。

ImageNet是一個(gè)擁有1400萬張圖片的巨大數(shù)據(jù)集,基于ImageNet數(shù)據(jù)集,ILSVRC(ImageNet Large Scale Visual Recognition Challenge)挑戰(zhàn)賽每年舉辦一次。

自2012年AlexNet在ILSVRC上以遠(yuǎn)超第二名的識(shí)別率打破當(dāng)年的記錄以后,深度學(xué)習(xí)在ImageNet數(shù)據(jù)集上的識(shí)別率在近兩年取得了一個(gè)又一個(gè)的突破。到2015年,ResNet的top-5識(shí)別率正式超過人類:

目標(biāo)檢測(cè)

像素級(jí)別的場(chǎng)景分割

視頻字幕生成

游戲和棋牌

語音識(shí)別,文本生成,黑白影片自動(dòng)著色,雅爾塔游戲……

深度學(xué)習(xí)有著極強(qiáng)的表示能力,能夠處理復(fù)雜的任務(wù),自然,我們需要使用深度學(xué)習(xí)來解決無人駕駛中一直以來的問題(基于深度學(xué)習(xí)的計(jì)算機(jī)視覺,基于深度學(xué)習(xí)的決策,基于強(qiáng)化學(xué)習(xí)的決策等等)。下面我們就開始深度學(xué)習(xí)的相關(guān)基礎(chǔ)。

▌深度前饋神經(jīng)網(wǎng)絡(luò)——為什么要深?

在第九篇博客的末尾其實(shí)我們已經(jīng)接觸了深度前饋神經(jīng)網(wǎng)絡(luò),我們使用一個(gè)規(guī)模很大的深度前饋網(wǎng)絡(luò)來解決MNIST手寫字識(shí)別問題,我們的這個(gè)網(wǎng)絡(luò)取得了98%98%的識(shí)別率。簡(jiǎn)單來說,深度前饋網(wǎng)絡(luò)就是早前的三層BP網(wǎng)絡(luò)的“加深版”,如圖所示:

其中的層被我們稱為全連接層。那么根據(jù)前面的神經(jīng)網(wǎng)絡(luò)的介紹我們知道,即使僅僅使用3層的神經(jīng)網(wǎng)絡(luò),我們就能夠擬合任意函數(shù)了,神經(jīng)網(wǎng)絡(luò)在設(shè)計(jì)的時(shí)候往往遵循奧卡姆剃刀原則,即我們往往使用最簡(jiǎn)單的結(jié)構(gòu)來建模,那么為什么要加深網(wǎng)絡(luò)的層數(shù)呢?

這個(gè)問題要從兩個(gè)方面來看:一是大數(shù)據(jù)下的模型訓(xùn)練效率,一是表示學(xué)習(xí)。

大數(shù)據(jù)下的模型訓(xùn)練效率

有人把深度學(xué)習(xí)突破的起因歸結(jié)于三個(gè)要素:

神經(jīng)網(wǎng)絡(luò)理論(一直以來的理論基礎(chǔ))

大量數(shù)據(jù)(得益于互聯(lián)網(wǎng)的發(fā)展)

當(dāng)代更強(qiáng)的并行計(jì)算能力(以GPU計(jì)算為代表)

其中的大量數(shù)據(jù)是深度神經(jīng)網(wǎng)絡(luò)能夠在性能上取得成功的一個(gè)重要因素,傳統(tǒng)機(jī)器學(xué)習(xí)算法在數(shù)據(jù)量增大到一定的數(shù)量級(jí)以后似乎會(huì)陷入一個(gè)性能的瓶頸(即使是基于結(jié)構(gòu)風(fēng)險(xiǎn)最小化的支持向量機(jī),其性能也會(huì)在數(shù)據(jù)量到達(dá)一定程度以后飽和),但是神經(jīng)網(wǎng)路似乎是可以不斷擴(kuò)容的機(jī)器學(xué)習(xí)算法,數(shù)據(jù)量越大,可以通過增加神經(jīng)元的個(gè)數(shù)以及隱含層的層數(shù),訓(xùn)練更加強(qiáng)大的神經(jīng)網(wǎng)絡(luò),其變化趨勢(shì)大致如下:

但是我們之前的文章也提到,當(dāng)前已經(jīng)可以證明,僅僅是簡(jiǎn)單的三層神經(jīng)網(wǎng)絡(luò),通過增加隱含層神經(jīng)元數(shù)量,理論上也可以擬合任意函數(shù)。那么我們?yōu)槭裁床恢苯邮褂脝渭兊娜龑泳W(wǎng)絡(luò)結(jié)構(gòu),只增加隱含層神經(jīng)元數(shù)量來提高模型容量,從而擬合復(fù)雜問題呢?

單純的增加單層神經(jīng)元數(shù)量能夠是的模型具有更加強(qiáng)的表示能力,但是,相比于增加層數(shù),每層使用相對(duì)少的神經(jīng)元的策略,前者在實(shí)際訓(xùn)練中訓(xùn)練成功的難度更大,包含大量隱含層神經(jīng)元的三層網(wǎng)絡(luò)的過擬合問題難以控制,并且要達(dá)到相同的性能,深層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)往往要比三層網(wǎng)絡(luò)需要的神經(jīng)元更少。

表示學(xué)習(xí)

另一種對(duì)深度學(xué)習(xí)前若干層作用的解釋就是表示學(xué)習(xí)。深度學(xué)習(xí)=深度表示學(xué)習(xí)(特征學(xué)習(xí)),下圖是一個(gè)多層卷積網(wǎng)絡(luò)在輸入圖像以后,神經(jīng)網(wǎng)絡(luò)隱含層神經(jīng)元激活的可視化結(jié)果:

如圖,神經(jīng)網(wǎng)絡(luò)的前若干層實(shí)際上發(fā)揮這特征提取和表示建立的作用,區(qū)別與傳統(tǒng)機(jī)器學(xué)習(xí)方法的人為設(shè)計(jì)特征,神經(jīng)網(wǎng)絡(luò)的特征設(shè)計(jì)是伴隨著神經(jīng)網(wǎng)絡(luò)的訓(xùn)練而進(jìn)行的,是一個(gè)自動(dòng)的表示建立過程。從圖中我們還能發(fā)現(xiàn),越靠近輸入端的層(越底層)提取的特征越簡(jiǎn)單,層數(shù)越高建立的特征越復(fù)雜。比如說圖中,第一層提取了“邊緣”特征,第二層則提取了輪廓特征,那么到了第三個(gè)隱含層,通過組合簡(jiǎn)單的底層特征,綜合出了更加高級(jí)的表示,提取的是識(shí)別目標(biāo)的局部特征。通過對(duì)特征的逐層抽象化,神經(jīng)網(wǎng)絡(luò)的層數(shù)越多,其能夠建立的特征表示也就越豐富。

▌應(yīng)用于深度神經(jīng)網(wǎng)絡(luò)的正則化技術(shù)

當(dāng)神經(jīng)網(wǎng)絡(luò)的隱含層數(shù)和神經(jīng)元數(shù)量增大時(shí),隨之而來的是參數(shù)數(shù)量的大幅度增大。這是的我們的神經(jīng)網(wǎng)絡(luò)更加容易過擬合,即模型在訓(xùn)練集上表現(xiàn)好,但是泛化能力差。在機(jī)器學(xué)習(xí)中,許多策略顯式地被設(shè)計(jì)為減少測(cè)試誤差(可能會(huì)以增大訓(xùn)練誤差為代價(jià))。這些策略被統(tǒng)稱為正則化。

下面我們介紹四種常見的正則化技術(shù),它們分別是:

數(shù)據(jù)集增強(qiáng)(Data Agumentation)

提前終止(Early Stopping)

參數(shù)范數(shù)懲罰(Parameter Norm Penalties)

Dropout

數(shù)據(jù)集增強(qiáng)

增強(qiáng)機(jī)器學(xué)習(xí)魯棒性的最直觀的一個(gè)策略就是使用更多的數(shù)據(jù)來訓(xùn)練模型,即數(shù)據(jù)集增強(qiáng)。然而,在現(xiàn)實(shí)情況下,我們的數(shù)據(jù)是有限的,所以我們往往通過創(chuàng)建假數(shù)據(jù)來增加我們的數(shù)據(jù)集合,而對(duì)于某些機(jī)器學(xué)習(xí)任務(wù)而言(如圖像分類),創(chuàng)建假數(shù)據(jù)是非常簡(jiǎn)單的,下面我們以MNIST手寫字為例來說明:

上圖中的三個(gè)字符是MNIST數(shù)據(jù)集的訓(xùn)練集中的三個(gè)數(shù)字,對(duì)于圖像這樣的高維并且包含巨大的可變性的數(shù)據(jù),我們可以對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單的平移,旋轉(zhuǎn),縮放等等來產(chǎn)生新的數(shù)據(jù)。

def expend_training_data(train_x, train_y): """ Augment training data """ expanded_images = np.zeros([train_x.shape[0] * 5, train_x.shape[1], train_x.shape[2]]) expanded_labels = np.zeros([train_x.shape[0] * 5]) counter = 0 for x, y in zip(train_x, train_y): # register original data expanded_images[counter, :, :] = x expanded_labels[counter] = y counter = counter + 1 # get a value for the background # zero is the expected value, but median() is used to estimate background's value bg_value = np.median(x) # this is regarded as background's value for i in range(4): # rotate the image with random degree angle = np.random.randint(-15, 15, 1) new_img = ndimage.rotate(x, angle, reshape=False, cval=bg_value) # shift the image with random distance shift = np.random.randint(-2, 2, 2) new_img_ = ndimage.shift(new_img, shift, cval=bg_value) # register new training data expanded_images[counter, :, :] = new_img_ expanded_labels[counter] = y counter = counter + 1 return expanded_images, expanded_labelsagument_x, agument_y = expend_training_data(x_train[:3], y_train[:3])

得到5倍于原數(shù)據(jù)集的新數(shù)據(jù)集:

后面的四個(gè)圖像是我們通過一定的變換得到的,我們并沒有去采集新的數(shù)據(jù),通過創(chuàng)造假數(shù)據(jù),我們的數(shù)據(jù)集變成了原來的若干倍,這種處理方法能夠顯著提高神經(jīng)網(wǎng)絡(luò)的泛化能力,即使是具有平移不變性的卷積神經(jīng)網(wǎng)絡(luò)(我們后面會(huì)詳述),使用這種簡(jiǎn)單處理方式得到的新數(shù)據(jù)也能大大改善泛化。

提前終止

當(dāng)訓(xùn)練參數(shù)數(shù)量大的神經(jīng)網(wǎng)絡(luò)時(shí),即模型容量大于實(shí)際需求時(shí),神經(jīng)網(wǎng)絡(luò)最終總是會(huì)過擬合,但是我們總是能夠觀察到,訓(xùn)練誤差會(huì)隨著訓(xùn)練時(shí)間的推移逐漸降低,但是驗(yàn)證集的誤差卻會(huì)先降低后升高,如下圖所示:

那么基于這個(gè)現(xiàn)象,我們可以在每次觀察到驗(yàn)證集誤差有所改善以后保存一份模型的副本,如果誤差惡化,則將 耐心值 +1,當(dāng)耐心值到達(dá)一個(gè)事先設(shè)定的閾值的時(shí)候,終止訓(xùn)練,返回保存的最后一個(gè)副本。這樣,我們能夠得到整個(gè)誤差曲線中最低的點(diǎn)的模型。

參數(shù)范數(shù)懲罰

許多正則化方法會(huì)向神經(jīng)網(wǎng)絡(luò)的損失函數(shù)L(θ)添加一個(gè)懲罰項(xiàng)Ω(w),一次來約束模型的學(xué)習(xí)能力,形式如下:

其中的θ是包括權(quán)重和偏置(w,b)在內(nèi)的神經(jīng)網(wǎng)絡(luò)的參數(shù),需要注意的是,懲罰項(xiàng)往往只對(duì)仿射變換中的權(quán)重(即w)進(jìn)行懲罰,偏置單元b不會(huì)被正則化,原因在于:每個(gè)權(quán)重明確表明兩個(gè)變量之間是如何相互作用的。要將權(quán)重?cái)M合地很好,需要在各種不同的條件下觀察這些變量。每一個(gè)偏置只會(huì)控制一個(gè)單獨(dú)的變量,這也就意味著在保留不被正則化的偏置時(shí),不需要引入過多的方差。 同樣,對(duì)偏置參數(shù)進(jìn)行正則化會(huì)引入相當(dāng)程度的欠擬合可能。因此往往只對(duì)權(quán)重進(jìn)行懲罰。α是一個(gè)需要人為設(shè)置的超參數(shù),稱為懲罰系數(shù), 當(dāng)α為 0 的時(shí)候,表示沒有參數(shù)懲罰,α越大,則對(duì)應(yīng)的參數(shù)的懲罰也就越大。以 L2 正則化為例,我們?cè)趽p失函數(shù)的后面添加了的正則項(xiàng)為:

那么最小化權(quán)重的平方會(huì)帶來什么結(jié)果呢?

神經(jīng)網(wǎng)絡(luò)將傾向于使所有的權(quán)重都很小,除非誤差導(dǎo)數(shù)過大。

防止擬合錯(cuò)誤的樣本。

使得模型更加“光滑”,即輸入輸出敏感性更低,輸入的微小變化不會(huì)明顯的反映到輸出上。

如果輸入端輸入兩個(gè)相同的輸入,網(wǎng)絡(luò)的權(quán)重分配會(huì)傾向于均分權(quán)重而不是將所有的權(quán)重都分到一個(gè)連接上。

L2懲罰一方面降低了權(quán)重的學(xué)習(xí)自由度,削弱了網(wǎng)絡(luò)的學(xué)習(xí)能力,另一方面相對(duì)均勻的權(quán)重又能使模型光滑化,使模型對(duì)輸入的細(xì)微變化不敏感,從而增強(qiáng)模型的魯棒性。

Dropout

參數(shù)范數(shù)懲罰通過改變神經(jīng)網(wǎng)絡(luò)的損失函數(shù)來實(shí)現(xiàn)正則化,而Dropout則通過改變神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)來增強(qiáng)網(wǎng)絡(luò)的泛化能力,如圖是一個(gè)神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)的結(jié)構(gòu):??

我們?cè)诘谝粋€(gè)隱含層后面添加了一個(gè)Dropout層,Dropout 就是指隨機(jī)地刪除掉網(wǎng)絡(luò)中某層的節(jié)點(diǎn),包括該節(jié)點(diǎn)的輸入輸出的邊,如下圖所示:

這也等價(jià)與以一定的幾率保留節(jié)點(diǎn)。在本例中,p即保留節(jié)點(diǎn)的幾率,我們?cè)O(shè)置為50%, 在實(shí)踐中,保留概率通常設(shè)置在[0.5,1]。那么Dropout為什么有助于防止過擬合呢?簡(jiǎn)單的解釋就是,運(yùn)用了dropout的訓(xùn)練過程,相當(dāng)于訓(xùn)練了很多個(gè)只有半數(shù)隱層單元的神經(jīng)網(wǎng)絡(luò)(后面簡(jiǎn)稱為“半數(shù)網(wǎng)絡(luò)”),每一個(gè)這樣的半數(shù)網(wǎng)絡(luò),都可以給出一個(gè)分類結(jié)果,這些結(jié)果有的是正確的,有的是錯(cuò)誤的。隨著訓(xùn)練的進(jìn)行,大部分半數(shù)網(wǎng)絡(luò)都可以給出正確的分類結(jié)果,那么少數(shù)的錯(cuò)誤分類結(jié)果就不會(huì)對(duì)最終結(jié)果造成大的影響。

那么等到訓(xùn)練結(jié)束的時(shí)候,我們的我們的網(wǎng)絡(luò)可以看作是很多個(gè)半數(shù)網(wǎng)絡(luò)的集成模型,到應(yīng)用網(wǎng)絡(luò)的階段,我們就不再使用Dropout,即p=1,網(wǎng)絡(luò)的最終輸出結(jié)果是所有半數(shù)網(wǎng)絡(luò)的集成結(jié)果,其泛化能力自然就會(huì)更好。

▌基于深度前饋神經(jīng)網(wǎng)絡(luò)的交通信號(hào)識(shí)別

Belgium Traffic Sign Dataset 數(shù)據(jù)集

我們使用BelgiumTS(Belgium Traffic Sign Dataset)來做一個(gè)簡(jiǎn)單的識(shí)別實(shí)例,BelgiumTS是一個(gè)交通信號(hào)的數(shù)據(jù)集,包含62中交通信號(hào)。

訓(xùn)練集的下載連接:

http://btsd.ethz.ch/shareddata/BelgiumTSC/BelgiumTSC_Training.zip

測(cè)試集的下載鏈接:http://btsd.ethz.ch/shareddata/BelgiumTSC/BelgiumTSC_Testing.zip

此數(shù)據(jù)集在不采用科學(xué)上網(wǎng)的方式時(shí)下載速度偏慢。

▌數(shù)據(jù)的讀取和可視化

下載好數(shù)據(jù)以后,解壓,使用如下目錄結(jié)構(gòu)存放數(shù)據(jù):

data/Training/data/Testing/

該數(shù)據(jù)集的訓(xùn)練集和測(cè)試集均包含了62個(gè)目錄,表示62種交通信號(hào)。使用如下函數(shù)讀取數(shù)據(jù):

def load_data(data_dir): """Loads a data set and returns two lists: images: a list of Numpy arrays, each representing an image. labels: a list of numbers that represent the images labels. """ # Get all subdirectories of data_dir. Each represents a label. directories = [d for d in os.listdir(data_dir) if os.path.isdir(os.path.join(data_dir, d))] # Loop through the label directories and collect the data in # two lists, labels and images. labels = [] images = [] for d in directories: label_dir = os.path.join(data_dir, d) file_names = [os.path.join(label_dir, f) for f in os.listdir(label_dir) if f.endswith(".ppm")] # For each label, load it's images and add them to the images list. # And add the label number (i.e. directory name) to the labels list. for f in file_names: images.append(skimage.data.imread(f)) labels.append(int(d)) return images, labels # Load training and testing datasets.ROOT_PATH = "data"train_data_dir = os.path.join(ROOT_PATH, "Training")test_data_dir = os.path.join(ROOT_PATH, "Testing")images, labels = load_data(train_data_dir)

輸出訓(xùn)練集的類別數(shù)和總的圖片數(shù)量:

print("Unique Labels: {0} Total Images: {1}".format(len(set(labels)), len(images)))

Unique Labels: 62Total Images: 4575

我們顯示每一個(gè)類別的第一張圖片看看。

def display_images_and_labels(images, labels): """Display the first image of each label.""" unique_labels = set(labels) plt.figure(figsize=(15, 15)) i = 1 for label in unique_labels: # Pick the first image for each label. image = images[labels.index(label)] plt.subplot(8, 8, i) # A grid of 8 rows x 8 columns plt.axis('off') plt.title("Label {0} ({1})".format(label, labels.count(label))) i += 1 _ = plt.imshow(image) plt.show()display_images_and_labels(images, labels)

顯然,數(shù)據(jù)集的圖片并不是統(tǒng)一的尺寸的,為了訓(xùn)練神經(jīng)網(wǎng)絡(luò),我們需要將所有圖片resize到一個(gè)相同的尺寸,在本文中,我們將圖片resize到(32,32):

# Resize imagesimages32 = [skimage.transform.resize(image, (32, 32)) for image in images]display_images_and_labels(images32, labels)

輸出resize以后的圖片信息

for image in images32[:5]: print("shape: {0}, min: {1}, max: {2}".format(image.shape, image.min(), image.max()))

shape: (32, 32, 3), min: 0.0, max: 1.0shape: (32, 32, 3), min: 0.13088235294117614, max: 1.0shape: (32, 32, 3), min: 0.057059972426470276, max: 0.9011967677696078shape: (32, 32, 3), min: 0.023820465686273988, max: 1.0shape: (32, 32, 3), min: 0.023690257352941196, max: 1.0

圖像的取值范圍已經(jīng)歸一化好了,下面我們使用TensorFlow構(gòu)造神經(jīng)網(wǎng)絡(luò)來訓(xùn)練一個(gè)深度前饋網(wǎng)絡(luò)識(shí)別這個(gè)交通信號(hào)。

數(shù)據(jù)預(yù)處理

我們對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,首先將三通道的RGB轉(zhuǎn)成灰度圖:

images_a = color.rgb2gray(images_a)display_images_and_labels(images_a, labels)

注意,這里現(xiàn)實(shí)的并不是灰度圖,原因在于我們使用了之前的display_images_and_labels函數(shù),只需要在該函數(shù)的imshow部分添加cmap='gray'即可顯示灰度圖。

我們使用前面的方法對(duì)數(shù)據(jù)進(jìn)行擴(kuò)充(將數(shù)據(jù)擴(kuò)充為原來的5倍),我們現(xiàn)實(shí)其中的三張圖片:

然后我們對(duì)數(shù)據(jù)進(jìn)行shuffle,并且把數(shù)據(jù)切分為訓(xùn)練集和驗(yàn)證集,并對(duì)標(biāo)簽進(jìn)行one-hot編碼:

from sklearn.utils import shuffleindx = np.arange(0, len(labels_a))indx = shuffle(indx)images_a = images_a[indx]labels_a = labels_a[indx]print(images_a.shape, labels_a.shape)train_x, val_x = images_a[:20000], images_a[20000:]train_y, val_y = labels_a[:20000], labels_a[20000:]train_y = keras.utils.to_categorical(train_y, 62)val_y = keras.utils.to_categorical(val_y, 62)print(train_x.shape, train_y.shape)

▌使用Keras構(gòu)造并訓(xùn)練深度前饋網(wǎng)絡(luò)

我們?nèi)匀皇褂蒙弦黄恼轮杏玫降纳疃惹梆伨W(wǎng)絡(luò),看看在這類復(fù)雜問題中的性能如何:

model = Sequential()model.add(Flatten(input_shape=(32, 32)))model.add(Dense(512, activation='relu'))model.add(Dropout(0.5))model.add(Dense(512, activation='relu'))model.add(Dropout(0.5))model.add(Dense(62, activation='softmax'))model.summary()model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy']) history = model.fit(train_x, train_y, batch_size=128, epochs=20, verbose=1, validation_data=(val_x, val_y)) ### print the keys contained in the history objectprint(history.history.keys())model.save('model.json')

現(xiàn)實(shí)訓(xùn)練loss和驗(yàn)證loss為:

加載測(cè)試數(shù)據(jù)集,查看精度:

('Test loss:', 0.8060373229994661)('Test accuracy:', 0.7932539684431893)

我們的這個(gè)簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)在測(cè)試集合上取得了79%的精度,我們現(xiàn)實(shí)幾個(gè)測(cè)試樣本的預(yù)測(cè)結(jié)果:

雖然精度不高,但效果似乎還行。。當(dāng)然,這個(gè)例子只是一個(gè)入門的網(wǎng)絡(luò),首先,它拋棄了3通道的圖像,所以信息會(huì)有一定的損失,其次,全連接網(wǎng)絡(luò)的第一步就是把圖像向量化了,我們能不能使用更加深,更加符合圖片二維特征的網(wǎng)絡(luò)呢?我們?cè)诤竺娴奈恼轮欣^續(xù)探討!

完整代碼鏈接:

http://download.csdn.net/download/adamshan/10217607

原文鏈接:

https://blog.csdn.net/adamshan/article/details/79127573

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 無人駕駛
    +關(guān)注

    關(guān)注

    98

    文章

    4003

    瀏覽量

    119917
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5442

    瀏覽量

    120800

原文標(biāo)題:無人駕駛汽車系統(tǒng)入門:深度前饋網(wǎng)絡(luò),深度學(xué)習(xí)的正則化,交通信號(hào)識(shí)別

文章出處:【微信號(hào):AI_Thinker,微信公眾號(hào):人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    詳解深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用

    處理技術(shù)也可以通過深度學(xué)習(xí)來獲得更優(yōu)異的效果,比如去噪、超分辨率和跟蹤算法等。為了跟上時(shí)代的步伐,必須對(duì)深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)技術(shù)有所
    的頭像 發(fā)表于 01-11 10:51 ?1772次閱讀
    詳解<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>、<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>與卷積<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的應(yīng)用

    無人駕駛電子與安全

    ,處理器經(jīng)過數(shù)據(jù)分析然后根據(jù)機(jī)器學(xué)習(xí)長(zhǎng)期積累的駕駛經(jīng)驗(yàn)選擇最優(yōu)的解決方案,直接跨越到無人駕駛的階段?;诖髷?shù)據(jù)的分析,將可能出現(xiàn)的各種隱患消除在未發(fā)生的萌芽。不管是安全
    發(fā)表于 02-22 16:07

    神經(jīng)網(wǎng)絡(luò)解決方案讓自動(dòng)駕駛成為現(xiàn)實(shí)

    制造業(yè)而言,深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)開辟了令人興奮的研究途徑。為了實(shí)現(xiàn)從諸如高速公路全程自動(dòng)駕駛儀的短時(shí)輔助模式到專職無人駕駛旅行的自動(dòng)
    發(fā)表于 12-21 17:11

    人臉識(shí)別、語音翻譯、無人駕駛...這些高科技都離不開深度神經(jīng)網(wǎng)絡(luò)了!

    ,如何用一個(gè)神經(jīng)網(wǎng)絡(luò),寫出一套機(jī)器學(xué)習(xí)算法,來自動(dòng)識(shí)別未知的圖像。一個(gè) 4 層的神經(jīng)網(wǎng)絡(luò)輸入層經(jīng)過幾層算法得到輸出層 實(shí)現(xiàn)機(jī)器學(xué)習(xí)方法有很
    發(fā)表于 05-11 11:43

    改善深層神經(jīng)網(wǎng)絡(luò)--超參數(shù)優(yōu)化、batch正則和程序框架 學(xué)習(xí)總結(jié)

    深度學(xué)習(xí)工程師-吳恩達(dá)》02改善深層神經(jīng)網(wǎng)絡(luò)--超參數(shù)優(yōu)化、batch正則和程序框架 學(xué)習(xí)
    發(fā)表于 06-16 14:52

    卷積神經(jīng)網(wǎng)絡(luò)模型發(fā)展及應(yīng)用

    神經(jīng)網(wǎng)絡(luò)已經(jīng)廣泛應(yīng)用于圖像分類、目標(biāo)檢測(cè)、語義分割以及自然語言處理等領(lǐng)域。首先分析了典型卷積神經(jīng)網(wǎng)絡(luò)模型為提高其性能增加
    發(fā)表于 08-02 10:39

    dropout正則技術(shù)介紹

    dropout技術(shù)是神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)模型的一簡(jiǎn)單而有效的正則方式。 本文將向你介紹drop
    發(fā)表于 10-10 10:38 ?2次下載

    英偉達(dá)無人駕駛Xavier處理器幫助應(yīng)用程序使用深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)算法

    該處理器可以幫助汽車在無人駕駛的應(yīng)用程序使用深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)算法,用來處理汽車內(nèi)外的傳感器數(shù)據(jù)、語言分析等內(nèi)容。通過該處理器可以快速的協(xié)調(diào)傳感器并感知用戶的操作,同時(shí)幫助
    的頭像 發(fā)表于 12-19 11:51 ?4482次閱讀

    快速了解神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)的教程資料免費(fèi)下載

    本文檔的詳細(xì)介紹的是快速了解神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)的教程資料免費(fèi)下載主要內(nèi)容包括了:機(jī)器學(xué)習(xí)概述,線性模型,前饋神經(jīng)網(wǎng)絡(luò),卷積
    發(fā)表于 02-11 08:00 ?33次下載
    快速了解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>與<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>的教程資料免費(fèi)下載

    基于深度神經(jīng)網(wǎng)絡(luò)的文本分類分析

    卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)、注意力機(jī)制等方法在文本分類的應(yīng)用和發(fā)展,分析多種典型分類方法的特點(diǎn)
    發(fā)表于 03-10 16:56 ?37次下載
    基于<b class='flag-5'>深度</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的文本分類分析

    基于深度神經(jīng)網(wǎng)絡(luò)的圖像語義分割方法

    對(duì)應(yīng)用于圖像語義分割的幾種深度神經(jīng)網(wǎng)絡(luò)模型進(jìn)行簡(jiǎn)單介紹,接著詳細(xì)闡述了現(xiàn)有主流的基于深度神經(jīng)網(wǎng)絡(luò)的圖像語義分割
    發(fā)表于 04-02 13:59 ?11次下載
    基于<b class='flag-5'>深度</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的圖像語義分割<b class='flag-5'>方法</b>

    淺析三種主流深度神經(jīng)網(wǎng)絡(luò)

    來源:青榴實(shí)驗(yàn)室 1、引子 深度神經(jīng)網(wǎng)絡(luò)(DNNs)最近在圖像分類或語音識(shí)別等復(fù)雜機(jī)器學(xué)習(xí)任務(wù)中表現(xiàn)出的優(yōu)異性能令人印象深刻。 在本文中,我們將了解深度
    的頭像 發(fā)表于 05-15 14:20 ?896次閱讀
    淺析<b class='flag-5'>三種</b>主流<b class='flag-5'>深度</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    淺析三種主流深度神經(jīng)網(wǎng)絡(luò)

    來源:青榴實(shí)驗(yàn)室1、引子深度神經(jīng)網(wǎng)絡(luò)(DNNs)最近在圖像分類或語音識(shí)別等復(fù)雜機(jī)器學(xué)習(xí)任務(wù)中表現(xiàn)出的優(yōu)異性能令人印象深刻。在本文中,我們將了解深度
    的頭像 發(fā)表于 05-17 09:59 ?2364次閱讀
    淺析<b class='flag-5'>三種</b>主流<b class='flag-5'>深度</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    卷積神經(jīng)網(wǎng)絡(luò)深度神經(jīng)網(wǎng)絡(luò)的優(yōu)缺點(diǎn) 卷積神經(jīng)網(wǎng)絡(luò)深度神經(jīng)網(wǎng)絡(luò)的區(qū)別

    深度神經(jīng)網(wǎng)絡(luò)是一基于神經(jīng)網(wǎng)絡(luò)的機(jī)器學(xué)習(xí)算法,其主要特點(diǎn)是由多層神經(jīng)元構(gòu)成,可以根據(jù)數(shù)據(jù)自動(dòng)調(diào)整
    發(fā)表于 08-21 17:07 ?3791次閱讀

    深度神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)方法

    結(jié)構(gòu)的構(gòu)建,還包括激活函數(shù)的選擇、優(yōu)化算法的應(yīng)用、正則技術(shù)的引入等多個(gè)方面。本文將從網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)、關(guān)鍵組件選擇、優(yōu)化與正則策略、
    的頭像 發(fā)表于 07-04 13:13 ?335次閱讀