終于要開 CNN(卷積神經(jīng)網(wǎng)絡(luò))這個(gè)神坑了。不過之所以說它神坑,是因?yàn)檫@里面牽扯到的數(shù)學(xué)概念相當(dāng)相當(dāng)多、導(dǎo)致如果只用 Numpy、從頭來實(shí)現(xiàn)的話會(huì)非常繁瑣。然而,如果只是理解它的直觀并且單純地實(shí)現(xiàn)它的話,由于有偉大的 tensorflow 框架、CNN 被極大地簡(jiǎn)化成了一個(gè)平凡的東西
我打算在不帶星號(hào)的章節(jié)中說明如何運(yùn)用 tensorflow 框架將 CNN 整合進(jìn)我們之前實(shí)現(xiàn)的神經(jīng)網(wǎng)絡(luò)框架中、并在帶星號(hào)的章節(jié)中說明如何使用純 Numpy 從頭實(shí)現(xiàn)一個(gè) CNN 框架。CNN 坑就坑在帶星號(hào)的章節(jié),所以觀眾老爺們大可帶著輕松愉悅的心情食用不帶星號(hào)的章節(jié) ( σ'ω')σ
這一章主要講 CNN 的一些非?;镜母拍?。首先我想指出的是:從結(jié)構(gòu)上來說,樸素的 CNN 和樸素的 NN 沒有任何區(qū)別(當(dāng)然,復(fù)雜的 CNN 會(huì)和 NN 有著比較大的區(qū)別)。這意味著樸素的 CNN 包含且只包含下列兩個(gè)東西:
單獨(dú)的層級(jí)結(jié)構(gòu) Layer
將 Layer 整合在一起的網(wǎng)絡(luò)結(jié)構(gòu)
所以在實(shí)現(xiàn)算法時(shí)我們要做的、無非就是把之前實(shí)現(xiàn)的 NN 相應(yīng)的部分進(jìn)行分情況討論
知道了結(jié)構(gòu)后,我們就要來看 CNN 的思想了??偟膩碚f可以把它概括成以下兩點(diǎn):
局部連接(Sparse Connectivity)
權(quán)值共享(Shared Weights)
它們有很好直觀。舉個(gè)栗子,我們平時(shí)四處看風(fēng)景時(shí),都是“一塊一塊”來看的、信息也都是“一塊一塊”地接收的(所謂的【局部感受野】)。在這個(gè)過程中,我們的思想在看的過程中通常是不怎么變的、而在看完后可能會(huì)發(fā)出“啊這風(fēng)景好美”的感慨、然后可能會(huì)根據(jù)這個(gè)感慨來調(diào)整我們的思想。在這個(gè)栗子中,那“一塊一塊”的風(fēng)景就是局部連接,我們的思想就是權(quán)值。我們?cè)诳达L(fēng)景時(shí)用的都是自己的思想,這就是權(quán)值共享的生物學(xué)意義(注:這個(gè)栗子是我開腦洞開出來的、完全不能保證其學(xué)術(shù)嚴(yán)謹(jǐn)性、還請(qǐng)各位觀眾老爺們帶著批判的眼光去看待它……如果有這方面專長(zhǎng)的觀眾老爺發(fā)現(xiàn)我完全就在瞎扯淡、還望不吝指出 ( σ'ω')σ)
光用文字?jǐn)⑹隹赡苓€是有些懵懂,我來畫張圖(參考了一張被引用爛了的圖;但由于原圖有一定的誤導(dǎo)性、所以還是打算自己畫一個(gè))(雖然很丑):
這張圖比較了 NN 和 CNN 的思想差別。左圖為 NN,可以看到它在處理輸入時(shí)是全連接的、亦即它采用的是全局感受野,同時(shí)各個(gè)神經(jīng)元又是相對(duì)獨(dú)立的、這直接導(dǎo)致它難以將原數(shù)據(jù)樣本翻譯成一個(gè)“視野”。而正如上面所說,CNN 采用的是局部感受野 + 共享權(quán)值,這在右圖中的表現(xiàn)為它的神經(jīng)元可以看成是“一整塊”的“視野”,這塊視野的每一個(gè)組成部分都是共享的權(quán)值(右圖中那些又粗又長(zhǎng)的綠線)在原數(shù)據(jù)樣本的某一個(gè)局部上“看到”的東西
接下來就粗略地講講怎么實(shí)現(xiàn)這種思想、亦即如何實(shí)現(xiàn) CNN 里面的前傳算法。具體的定義會(huì)在數(shù)學(xué)系列里面進(jìn)行說明,這里就只放代碼核心了(Again,tensorflow 大法好?。?/p>
def _conv(self, x, w): return tf.nn.conv2d(x, w, strides=[self._stride] * 4, padding=self._pad_flag)def _activate(self, x, w, bias, predict): res = self._conv(x, w) + bias return layer._activate(self, res, predict)
這里面涉及到一些以后會(huì)說明的東西,但如果知道概念的話、代碼應(yīng)該還是相當(dāng)可讀的
-
cnn
+關(guān)注
關(guān)注
3文章
349瀏覽量
21968 -
Layer
+關(guān)注
關(guān)注
0文章
17瀏覽量
6627
原文標(biāo)題:從零開始學(xué)人工智能(8)--Python · 神經(jīng)網(wǎng)絡(luò)(七)· CNN
文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論