小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

 南風(fēng)清雨 2018-08-30

本文主要介紹了機(jī)器學(xué)習(xí)概念,討論了典型卷積神經(jīng)網(wǎng)絡(luò)中的主要部分,如卷積層、合并層和完全連接層。

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

介紹

卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一組深層網(wǎng)絡(luò),它可以利用數(shù)據(jù)(如圖像)的空間結(jié)構(gòu)來了解數(shù)據(jù),從而使算法可以輸出一些有用的信息??紤]一個(gè)問題,如何確定某個(gè)圖像中是否有人?例如,如果給CNN一個(gè)人的圖像,這個(gè)深度神經(jīng)網(wǎng)絡(luò)首先需要學(xué)習(xí)一些局部特征(例如眼睛、鼻子、嘴巴等)。這些局部特征就是在卷積層中習(xí)得的。

然后,CNN將查看給定圖像中存在的局部特征,然后生成特定的激活模式(或激活矢量),該激活模式將完全的表示這些局部特征映射的存在。這些激活模式由CNN中完全連接的層產(chǎn)生。例如,如果圖像為非人物,則激活模式將與針對人物圖像的激活模式不同。

CNN在模塊化層面

現(xiàn)在介紹CNN中的子模塊。一個(gè)典型的CNN有三種不同的部分。它們是卷積層、合并層和完全連接層。下文將重點(diǎn)介紹合并層的概念。

首先我們討論卷積層在深度上起到的作用。卷積層由許多內(nèi)核組成,存在于卷積層中的這些內(nèi)核(有時(shí)稱為卷積濾波器)學(xué)習(xí)圖像中存在的局部特征。卷積層學(xué)習(xí)的這種局部特征稱為特征映射。然后將這些特征在圖像上進(jìn)行卷積。這種卷積操作將產(chǎn)生一個(gè)矩陣(有時(shí)稱為激活圖)。如果在卷積濾波器中表示的特征出現(xiàn)在輸入的該位置處,則激活映射在給定位置處產(chǎn)生高值。

合并層使這些特征通過CNN平移而不會改變(例如,無論人的眼睛是在[x = 10,y = 10]還是[x = 12,y = 11]位置,合并層輸出都相同)。聚合幾個(gè)這樣的層,會使我們具有更高的平移不變性。

最后是完全連接層。完全連接層負(fù)責(zé)根據(jù)激活的特征圖集和圖像中的位置生成不同的激活圖案,并激活特征圖。這就是CNN在視覺上的樣子。

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

在了解CNN的整體結(jié)構(gòu)的基礎(chǔ)上,讓我們繼續(xù)理解構(gòu)成CNN的每個(gè)子組件。

卷積層

卷積運(yùn)算具體做些什么? 如果該位置存在卷積特征,則卷積運(yùn)算為給定位置輸出高值,否則輸出低值。更具體地說,在卷積核的給定位置,我們?nèi)∶總€(gè)核心單元值和與核心單元重疊的對應(yīng)圖像像素值的元素相乘,然后取它們的和。精確值的確定根據(jù)以下公式(m - 核寬和高,h - 卷積輸出,x - 輸入,w - 卷積核)。

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

圖像上的卷積過程,如下圖所示:

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

僅僅知道卷積運(yùn)算的作用還不夠,我們還需要了解卷積輸出代表什么。設(shè)想卷積輸出中的值的顏色(0 - 黑色,100 - 白色)。如果你將這幅圖可視化像,它將代表一個(gè)在眼睛所在位置發(fā)光的二元圖像。

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

卷積運(yùn)算也可以被認(rèn)為是對給定圖像進(jìn)行某種變換。該變換可能導(dǎo)致各種效果(例如,提取邊緣,模糊等)。

合并層

現(xiàn)在讓我們來了解合并層的功能。合并(或有時(shí)稱為二次采樣)層使得CNN在卷積輸出方面具有平移不變性。實(shí)踐中使用兩種不同的池化機(jī)制(最大池化和平均池化)。 我們將max-pooling稱為pooling,因?yàn)閙ax-pooling與平均池化相比被廣泛使用。更準(zhǔn)確地說,在給定位置的合并操作輸出落入內(nèi)核的輸入的最大值。 在數(shù)學(xué)上,

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

讓我們通過在前面看到的卷積輸出上應(yīng)用合并層操作來理解其的工作原理。

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

如您所見,我們使用同一圖像的兩個(gè)變體。一個(gè)原始圖像和另一個(gè)圖像在x軸上稍微平移。 但是,合并操作會使兩個(gè)圖像輸出完全相同的特征圖(黑色 - 0,白色 - 100)。 所以我們說合并操作使得CNN翻譯不變量的知識成為可能。需要注意的一點(diǎn)是,我們每次移動(dòng)的像素不是1個(gè)像素,而是2個(gè)像素。這就是所謂的跨越式合并,這意味著我們正在以2的步幅進(jìn)行合并。

完全連接層

完全連接層將結(jié)合由不同卷積核所學(xué)習(xí)的特征,以便網(wǎng)絡(luò)可以建立關(guān)于整體圖像的全局表示。 我們可以理解完全連接層,如下所示。

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

完全連接層中的神經(jīng)元將根據(jù)輸入中是否存在由卷積特征表示的各種實(shí)體而被激活。當(dāng)完全連接的神經(jīng)元為此被激活時(shí),它會根據(jù)輸入圖像中存在的特征產(chǎn)生不同的激活模式。這為圖像中存在的輸出層提供了一種緊湊的表示形式,即輸出層可以輕松用于正確分類圖像。

一起編織它們

現(xiàn)在我們所要做的就是將所有這些組合起來,形成一個(gè)從原始圖像到?jīng)Q策的模型??偠灾?,卷積層將學(xué)習(xí)數(shù)據(jù)中的各種局部特征,那么合并層將使得CNN對于這些特征的平移不變。最后,我們有完全連接層,說:'我們發(fā)現(xiàn)了兩只眼睛、一只鼻子和一只嘴巴,所以這一定是一個(gè)人,并激活正確的輸出。

添加越來越多的層有什么作用?

增加更多的層顯然可以提高深度神經(jīng)網(wǎng)絡(luò)的性能。事實(shí)上,深度學(xué)習(xí)中最引人注目的突破性研究大多與解決如何添加更多層同時(shí)不影響模型的訓(xùn)練的問題有關(guān)。因?yàn)槟P驮缴钊?,?xùn)練越困難。

但擁有更多的層可以幫助CNN以分層方式學(xué)習(xí)功能。例如,第一層學(xué)習(xí)圖像中的各種邊緣方向,第二層學(xué)習(xí)基本形狀(圓形、三角形等),第三層學(xué)習(xí)更高級的形狀(例如,眼睛的形狀、鼻子的形狀)等等上。與使用單層學(xué)習(xí)的CNN相比,這將會有更好的性能。

訓(xùn)練CNN(又名反向傳播)

現(xiàn)在需要記住的一點(diǎn)是,當(dāng)你實(shí)現(xiàn)CNN時(shí),這些卷積特征(眼睛、鼻子、嘴巴)不會自己出現(xiàn)。CNN的目標(biāo)是學(xué)習(xí)給定數(shù)據(jù)的這些特征。為此,我們定義一個(gè)成本函數(shù),獎(jiǎng)勵(lì)正確識別的數(shù)據(jù)并懲罰錯(cuò)誤分類的數(shù)據(jù)。示例成本函數(shù)是均方根誤差或二元交叉熵?fù)p失。

在定義了損失之后,我們可以優(yōu)化特征的權(quán)重(即特征的每個(gè)單元格值),以反映引導(dǎo)CNN正確識別某個(gè)人的有用特征。更具體地說,我們通過在每個(gè)參數(shù)的梯度相對于損失顯示的相反方向上邁出一小步來優(yōu)化每個(gè)卷積核和完全連接的神經(jīng)元。但是,要實(shí)現(xiàn)CNN,您需要知道如何實(shí)現(xiàn)梯度傳播的確切細(xì)節(jié)。這是因?yàn)椋蠖鄶?shù)深度學(xué)習(xí)庫(例如TensorFlow、PyTorch)會在您自定義正向計(jì)算時(shí)在內(nèi)部實(shí)施這些差異化操作。

用Keras實(shí)現(xiàn)和運(yùn)行CNN

這里我們將簡要討論如何實(shí)現(xiàn)CNN。僅僅了解基礎(chǔ)知識還不夠,我們也應(yīng)該了解如何使用像Keras這樣的標(biāo)準(zhǔn)深度學(xué)習(xí)庫來實(shí)現(xiàn)模型。

首先我們定義我們想要使用的Keras API。 我們將使用順序API。

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

然后我們定義一個(gè)卷積層,如下所示:

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

在這里,32是該層中的內(nèi)核數(shù)量,(3,3)是卷積層的內(nèi)核大?。ǜ叨群蛯挾龋?。我們使用非線性激活Relu和[圖像高度、圖像寬度、顏色通道]的輸入形狀[28,28,1]。 請注意,輸入形狀應(yīng)該是前一層產(chǎn)生的輸出的形狀 因此,對于第一個(gè)卷積層,我們有實(shí)際的數(shù)據(jù)輸入。 對于層的其余部分,它將是前一層產(chǎn)生的輸出。接下來我們討論如何實(shí)現(xiàn)最大池化:

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

這里我們不提供任何參數(shù),因?yàn)槲覀儗⑹褂肒eras中提供的默認(rèn)值。如果你沒有指定參數(shù),Keras將使用(2,2)的內(nèi)核大小和(2,2)的步幅。接下來我們定義完全連接層。但在此之前,我們需要將輸出平坦化,因?yàn)橥耆B接層要處理1D數(shù)據(jù):

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

在這里我們定義了兩個(gè)完全連接或密集的層。 第一個(gè)完全連接的層有256個(gè)神經(jīng)元,并使用Relu激活。 最后,我們定義一個(gè)具有10個(gè)輸出節(jié)點(diǎn)并具有softmax激活的密集層。 這充當(dāng)輸出層,它將激活具有相同對象的圖像的特定神經(jīng)元。 最后我們編譯我們的模型,

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

在這里,我們說使用 Adam optimiser(訓(xùn)練模型),使用交叉熵?fù)p失并用模型的準(zhǔn)確性來評估模型。最后我們可以使用數(shù)據(jù)來訓(xùn)練和測試我們的模型。我們將使用MNIST數(shù)據(jù)集,使用在練習(xí)中定義的maybe_download和read_mnist函數(shù)下載并讀入內(nèi)存。MNIST數(shù)據(jù)集包含手寫數(shù)字(0-9)的圖像,目標(biāo)是通過分配圖像表示的數(shù)字來正確分類圖像。

接下來我們通過調(diào)用以下函數(shù)來訓(xùn)練我們的模型:

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

我們可以用一些測試數(shù)據(jù)來測試我們的模型,如下所示:

用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN!

我們將在幾個(gè)不同的時(shí)期運(yùn)行它,這將幫助您提高您的模型性能。

結(jié)論

我們首先站在有利位置討論了在CNN內(nèi)部發(fā)生的事情。然后我們討論了典型CNN中的主要部分,如卷積層、合并層和完全連接層。之后我們更詳細(xì)地介紹了每個(gè)部分。接下來,我們非常簡短地討論了如何在CNN中訓(xùn)練。最后我們討論了我們可以用Keras實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的CNN:一個(gè)高級的TensorFlow庫。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多