官术网_书友最值得收藏!

2.1 為視覺(jué)使用神經(jīng)元

在第1章編寫(xiě)的示例中,你看到了當(dāng)給出線(xiàn)性方程中直線(xiàn)上的點(diǎn)的一些示例時(shí),神經(jīng)網(wǎng)絡(luò)如何將自身“擬合”到線(xiàn)性方程所需的參數(shù)中。從視覺(jué)上看,我們的神經(jīng)網(wǎng)絡(luò)可能如圖2-1所示。

圖2-1:使用神經(jīng)網(wǎng)絡(luò)將X擬合到Y(jié)

這是最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò),只有一層,而這一層只有一個(gè)神經(jīng)元。

事實(shí)上,我在創(chuàng)建這個(gè)例子時(shí)有點(diǎn)作弊,因?yàn)槊芗瘜又械纳窠?jīng)元在學(xué)習(xí)權(quán)重和偏差時(shí)本質(zhì)上是線(xiàn)性的,所以對(duì)一個(gè)線(xiàn)性方程來(lái)說(shuō),一個(gè)神經(jīng)元就足夠了!

但是,當(dāng)我們對(duì)此進(jìn)行編碼時(shí),請(qǐng)記住我們創(chuàng)建了一個(gè)Sequential,并且該Sequential包含一個(gè)Dense,如下所示:

如果我們想要更多層,則可以使用相同的代碼模式。例如,如果我們想表示一個(gè)如圖2-2所示的神經(jīng)網(wǎng)絡(luò),就很容易做到。

圖2-2:稍微高級(jí)一點(diǎn)的神經(jīng)網(wǎng)絡(luò)

首先,讓我們考慮圖2-2中的元素。神經(jīng)元的每個(gè)垂直排列都應(yīng)被視為一層。圖2-3向我們展示了這個(gè)模型中的層。

要對(duì)這些進(jìn)行編碼,我們只需在Sequential定義中列出它們,將我們的代碼更新為如下所示的代碼:

我們簡(jiǎn)單地將層定義為逗號(hào)分隔的定義列表,并將其放在Sequential中,因此你可以在這里看到,有兩個(gè)單元的Dense,緊接著有一個(gè)單元的Dense,我們得到的架構(gòu)如圖2-3所示。

圖2-3:神經(jīng)網(wǎng)絡(luò)中的層

但在每種情況下,我們的輸出層都只是一個(gè)值。輸出端有一個(gè)神經(jīng)元,并且給定的這個(gè)神經(jīng)元只能學(xué)習(xí)權(quán)重和偏差,對(duì)于理解圖像的內(nèi)容不是很有用,因?yàn)榧词故亲詈?jiǎn)單的圖像也有太多的內(nèi)容無(wú)法僅由一個(gè)值表示。

那么如果我們?cè)谳敵錾嫌卸鄠€(gè)神經(jīng)元呢?考慮圖2-4中的模型。

圖2-4:具有多個(gè)輸出的神經(jīng)網(wǎng)絡(luò)

現(xiàn)在我們有多個(gè)輸入和多個(gè)輸出。為了設(shè)計(jì)一些東西來(lái)識(shí)別和解析圖像中的內(nèi)容(你記得,這就是我們定義計(jì)算機(jī)視覺(jué)的方式),如果我們將輸出神經(jīng)元分配給想要識(shí)別的類(lèi)會(huì)怎樣?

我們的意思是什么?就像學(xué)習(xí)一門(mén)語(yǔ)言一樣,你是一個(gè)字一個(gè)字地學(xué)習(xí)它,所以在學(xué)習(xí)如何解析圖像時(shí),我們必須限制計(jì)算機(jī)可以理解的事物數(shù)量。因此,舉例來(lái)說(shuō),如果從簡(jiǎn)單開(kāi)始,讓計(jì)算機(jī)識(shí)別貓和狗之間的區(qū)別,我們可以創(chuàng)建兩種圖像類(lèi)型(貓或狗)的“詞匯表”,并為每個(gè)圖像分配一個(gè)輸出神經(jīng)元。這里通常使用術(shù)語(yǔ)“類(lèi)”,不要與面向?qū)ο缶幊讨械念?lèi)混淆。

因?yàn)槟阌泄潭〝?shù)量的“類(lèi)”,你希望自己的模型能夠識(shí)別這些“類(lèi)”,所以使用的術(shù)語(yǔ)通常是分類(lèi)或圖像分類(lèi),你的模型也可以稱(chēng)為分類(lèi)器。

因此,為了識(shí)別貓或狗,我們可以將圖2-4更新為圖2-5。

圖2-5:更新為貓或狗

所以我們將一張圖片輸入神經(jīng)網(wǎng)絡(luò),最后它有兩個(gè)神經(jīng)元。這些神經(jīng)元每輸出一個(gè)數(shù)字,我們都希望該數(shù)字代表網(wǎng)絡(luò)是否認(rèn)為它“看到”了一只狗或一只貓。可以把這種方法擴(kuò)展到其他類(lèi)別,因此如果你想識(shí)別不同的動(dòng)物,只需要額外的輸出神經(jīng)元來(lái)表示它們的類(lèi)別。但為保持簡(jiǎn)單,我們暫時(shí)只用兩個(gè)。

所以,現(xiàn)在我們的問(wèn)題變成了如何表示我們的數(shù)據(jù),以便計(jì)算機(jī)開(kāi)始將我們的輸入圖像與我們想要的輸出神經(jīng)元進(jìn)行匹配?

一種方法是使用獨(dú)熱編碼(one-hot encoding)。乍一看,這似乎有點(diǎn)煩瑣和浪費(fèi),但是當(dāng)你了解基本概念以及它如何與神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)匹配時(shí),它就開(kāi)始變得有意義了。這種類(lèi)型的編碼背后的想法是有一個(gè)值數(shù)組,它的大小是我們的類(lèi)數(shù)量。該數(shù)組中的每個(gè)元素都為零,除了代表你想要的類(lèi)的元素。在這種情況下,你將其設(shè)置為1。

例如,如果你查看圖2-5,則會(huì)看到兩個(gè)輸出神經(jīng)元——一個(gè)用于貓,一個(gè)用于狗。因此,如果想表示一只貓的樣子,我們可以將其表示為[1,0],類(lèi)似地,如果想表示一只狗的樣子,我們可以將其編碼為[0,1]。在這一點(diǎn)上,你可能會(huì)想,當(dāng)你識(shí)別更多類(lèi)(比如1000)時(shí),這看起來(lái)是多么浪費(fèi),其中數(shù)據(jù)上的每個(gè)標(biāo)簽將有999個(gè)0和一個(gè)1。

這絕對(duì)效率不高,但你只有在訓(xùn)練模型時(shí)才為圖像存儲(chǔ)這樣的數(shù)據(jù),完成后便可以將其丟棄。由于你的模型的輸出層具有與此編碼匹配的神經(jīng)元,因此當(dāng)你閱讀它們時(shí),知道哪些代表哪類(lèi)。

所以,如果用貓和狗的這些編碼來(lái)更新圖2-5中的內(nèi)容,那么若輸入一張貓的圖像,則我們希望這個(gè)輸出看起來(lái)像那些編碼,如圖2-6所示。

圖2-6:使用獨(dú)熱編碼來(lái)標(biāo)記貓

現(xiàn)在神經(jīng)網(wǎng)絡(luò)按照我們希望的方式運(yùn)行。我們輸入貓的圖像,輸出神經(jīng)元以編碼[1,0]響應(yīng),表明它“看到”了一只貓。這為我們提供了可用于訓(xùn)練網(wǎng)絡(luò)的數(shù)據(jù)表示的基礎(chǔ)。因此,例如,如果我們有一堆貓和狗的圖像,并且我們相應(yīng)地標(biāo)記這些圖像,那么神經(jīng)網(wǎng)絡(luò)可能會(huì)“擬合”這些輸入內(nèi)容和這些標(biāo)簽,使得將來(lái)的圖像會(huì)給出相同的輸出。

事實(shí)上,將要發(fā)生的是,輸出神經(jīng)元不會(huì)給出1或0,而是給出一個(gè)介于0和1之間的值。這也恰好是一個(gè)概率值。因此,如果使用獨(dú)熱編碼標(biāo)簽在圖像上訓(xùn)練神經(jīng)網(wǎng)絡(luò),并為每個(gè)類(lèi)輸出一個(gè)神經(jīng)元,那么你最終將擁有一個(gè)模型來(lái)解析圖像并返回它可以看到的概率列表,如圖2-7所示。

圖2-7:解析圖像的內(nèi)容

在這里,你可以看到模型確定它正在看香蕉的可能性為98.82%,而它看的是Granny Smith蘋(píng)果或無(wú)花果的可能性較小。雖然很明顯這是香蕉,但當(dāng)這個(gè)應(yīng)用程序查看圖像時(shí),它從圖像中提取特征,其中一些特征可能存在于蘋(píng)果中——例如皮膚紋理或者顏色。

可以想象,如果你想訓(xùn)練一個(gè)模型,你需要大量的圖像示例,這些示例需要根據(jù)它們的類(lèi)別進(jìn)行標(biāo)記。值得慶幸的是,有一些基本數(shù)據(jù)集限制了范圍以使其易于學(xué)習(xí),接下來(lái)我們將考慮從頭開(kāi)始構(gòu)建分類(lèi)器。

主站蜘蛛池模板: 凭祥市| 宣汉县| 缙云县| 阳江市| 拉孜县| 那坡县| 宣汉县| 荆州市| 资溪县| 呼和浩特市| 开化县| 大宁县| 龙门县| 安国市| 景泰县| 濮阳县| 长顺县| 介休市| 始兴县| 福海县| 苏尼特右旗| 务川| 东丰县| 荥经县| 甘德县| 霍林郭勒市| 开封县| 德昌县| 漳浦县| 池州市| 仁化县| 武陟县| 广东省| 淮滨县| 奉节县| 错那县| 思南县| 信丰县| 邵东县| 莒南县| 武鸣县|