從Keras開始掌握深度學習-3 實現(xiàn)卷積神經網絡

前言

關于卷積神經網絡的詳細內容可以參考我前面寫的文章:從零開始機器學習-18 CNN:卷積神經網絡
在了解了卷積網絡之后平酿,不難發(fā)現(xiàn),基本上所有的卷積網絡都是按照:"卷積層->池化層->卷積層->池化層...->全連接層->輸出層"這樣的形式進行堆疊排列的棚愤。這樣的層級結構在Keras中使用Sequential模型來實現(xiàn)極為方便尸昧。

在Keras中實現(xiàn)卷積網絡

首先勤晚,卷積網絡是神經網絡的一種,因此卷及網絡中需要有各種層與激活函數(shù)领虹。這些層有全連接層(Dense Layer)、卷積層(Conv Layer)和池化層(Pooling Layer)菌羽,因此需要導入Keras的Layers包中的如下內容:

from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D

在準備完成之后掠械,通過Pickle加載上一講中準備好的X(特征集)與y(標簽集)數(shù)據由缆。

X = pickle.load(open("X.pickle","rb"))
y = pickle.load(open("y.pickle","rb"))

為了更好地訓練神經網絡,在訓練之前進行數(shù)據預處理顯得至關重要猾蒂。將數(shù)據進行歸一化(Normalization)或者白化(Whitening)處理之后均唉,神經網絡算法的效果可以得到明顯的提升。
歸一化通常有:減均值肚菠、大小縮放和標準化三個方法舔箭。面對圖像數(shù)據來說(像素取值范圍通常是0-255),大小縮放是最好的方法蚊逢,此時只要將數(shù)據除以255即可层扶。

X = X / 255

下面便是使用Keras的Sequential模型來實現(xiàn)卷及網絡了。
讓我們來定義一個最簡單的卷積網絡烙荷,首先約定命名方法镜会。使用Cx來標記卷積層,使用Px來表示池化層终抽,使用Fx來表示全連接層戳表。其中,x表示層的下標昼伴。
這個最簡單的卷積網絡將會由如下的幾個層構成(讀者可以自由擴展匾旭,或按照諸如LeNet-5等經典的網絡結構來編寫)。
首先是C1卷積層圃郊,這個卷積層是一個二維卷積層(Conv2D)价涝,卷積核的數(shù)目是64,即輸出的維度是64持舆,卷積核的大小為3x3色瘩,當使用該層作為第一層時,應提供input_shape參數(shù)逸寓。例如input_shape = (128,128,3)代表128x128的彩色RGB圖像(data_format='channels_last')泞遗。
緊接著C1卷積層需要提供一個激活函數(shù),這里采用ReLU作為激活函數(shù)席覆。
然后就是P1池化層史辙,池化層采用最常見的MaxPooling,采用2x2的池化大小佩伤,也就是下采樣因子聊倔。
C2,P2重復上述層生巡。
最后再輸出之前我們需要將上述幾個層的輸出作為全連接層的輸入耙蔑。由于卷積層和池化層的輸出是2D的,因此需要將其壓平孤荣,此時需要用到Flatten甸陌,而后使用sigmoid激活函數(shù)將結果輸出(我們只需對貓和狗進行分類须揣,如果分類的類別過多地話則可以用softmax作為激活函數(shù))。
這樣钱豁,整個網絡的結構就被定義完了耻卡。在進行訓練之前,需要提供損失函數(shù)和優(yōu)化函數(shù)等牲尺。這里使用二元交叉熵作為損失函數(shù)卵酪,采用ADAM作為優(yōu)化器,使用accuracy作為性能評估項谤碳。
上述代碼如下:

model = Sequential()

model.add(Conv2D(64, (3, 3), input_shape = X.shape[1:]))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Flatten()) #Conv Layer是2D溃卡, DenseLayer是1D的 所以需要將ConvLayer壓平
model.add(Dense(64))
model.add(Activation("relu"))

model.add(Dense(1))
model.add(Activation("sigmoid"))

model.compile(loss="binary_crossentropy",
             optimizer="adam",
             metrics=["accuracy"]) # 可以使用categorical_crossentropy作為損失函數(shù)

model.fit(X, y, batch_size =32, epochs=10, validation_split=0.1)

通過model.fit方法,我們給模型提供了數(shù)據集蜒简,指明了訓練的epoch和驗證集劃分的比例瘸羡。運行程序之后,訓練結果如下:

訓練結果

可以看到搓茬,通過10個epochs之后最铁,卷積網絡的預測準確率在驗證集上達到了0.8以上。這個結果也是普通的MLP絕對無法做到的垮兑。
通過采用更加先進的網絡結構,可以得到更高的準確率漱挎。

圖像分類模型

以時間為順序系枪,有這些卷積網絡被提出。
LeNet-5磕谅,AlexNet私爷,VGGNet,GoogLeNet膊夹,ResNet和DenseNet等衬浑。這些圖像分類模型的不斷發(fā)展,推進著圖像分類準確率不斷提升放刨。
這些網絡結構雖然越來越復雜工秩,但都可以通過Keras或是Tensorflow來實現(xiàn)。讀者可以選擇特定的網絡进统,以提高準確度作為目標助币,來實現(xiàn)相應的圖像分類模型。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末螟碎,一起剝皮案震驚了整個濱河市眉菱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掉分,老刑警劉巖俭缓,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件克伊,死亡現(xiàn)場離奇詭異,居然都是意外死亡华坦,警方通過查閱死者的電腦和手機愿吹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來季春,“玉大人洗搂,你說我怎么就攤上這事≡嘏” “怎么了耘拇?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宇攻。 經常有香客問我惫叛,道長,這世上最難降的妖魔是什么逞刷? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任嘉涌,我火速辦了婚禮,結果婚禮上夸浅,老公的妹妹穿的比我還像新娘仑最。我一直安慰自己,他們只是感情好帆喇,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布警医。 她就那樣靜靜地躺著,像睡著了一般坯钦。 火紅的嫁衣襯著肌膚如雪预皇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天婉刀,我揣著相機與錄音吟温,去河邊找鬼。 笑死突颊,一個胖子當著我的面吹牛鲁豪,可吹牛的內容都是我干的。 我是一名探鬼主播律秃,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼呈昔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了友绝?” 一聲冷哼從身側響起堤尾,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迁客,沒想到半個月后郭宝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辞槐,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年粘室,在試婚紗的時候發(fā)現(xiàn)自己被綠了榄檬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡衔统,死狀恐怖鹿榜,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情锦爵,我是刑警寧澤舱殿,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站险掀,受9級特大地震影響沪袭,放射性物質發(fā)生泄漏。R本人自食惡果不足惜樟氢,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一冈绊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧埠啃,春花似錦死宣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叹螟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間台盯,已是汗流浹背罢绽。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留静盅,地道東北人良价。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像蒿叠,于是被迫代替她去往敵國和親明垢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容