keras實(shí)現(xiàn)常用深度學(xué)習(xí)模型

LeNet:基于漸變的學(xué)習(xí)應(yīng)用于文檔識(shí)別


image.png

一些要點(diǎn):

每個(gè)卷積層包含三個(gè)部分:卷積裙秋、池化和非線性激活函數(shù)
使用卷積提取空間特征
降采樣(Subsample)的平均池化層(Average?Pooling)
雙曲正切(Tanh)或S型(Sigmoid)的激活函數(shù)
MLP作為最后的分類器
層與層之間的稀疏連接減少計(jì)算復(fù)雜度

#coding=utf-8  
from keras.models import Sequential  
from keras.layers import Dense,Flatten  
from keras.layers.convolutional import Conv2D,MaxPooling2D  
from keras.utils.np_utils import to_categorical  
import numpy as np  
  
model = Sequential()  
model.add(Conv2D(32,(5,5),strides=(1,1),input_shape=(32,32,1),padding='valid',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Conv2D(64,(5,5),strides=(1,1),padding='valid',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Flatten())  
model.add(Dense(100,activation='relu'))  
model.add(Dense(10,activation='softmax'))  
model.compile(optimizer='sgd',loss='categorical_crossentropy',metrics=['accuracy'])  
model.summary()  
  
model.fit(train_x,train_y,validation_data=(valid_x,valid_y),batch_size=20,epochs=20,verbose=2)  
#[0.031825309940411217, 0.98979999780654904]  
print model.evaluate(test_x,test_y,batch_size=20,verbose=2)  
image.png

AlexNet:具有深卷積神經(jīng)網(wǎng)絡(luò)的ImageNet分類

image.png

AlexNet將LeNet的思想發(fā)揚(yáng)光大,把CNN的基本原理應(yīng)用到了很深很寬的網(wǎng)絡(luò)中芜果。AlexNet主要使用到的新技術(shù)點(diǎn)如下:

成功使用ReLU作為CNN的激活函數(shù)麸祷,并驗(yàn)證其效果在較深的網(wǎng)絡(luò)超過了Sigmoid魄咕,成功解決了Sigmoid在網(wǎng)絡(luò)較深時(shí)的梯度彌散問題。雖然ReLU激活函數(shù)在很久之前就被提出了,但是直到AlexNet的出現(xiàn)才將其發(fā)揚(yáng)光大磕诊。

訓(xùn)練時(shí)使用Dropout隨機(jī)忽略一部分神經(jīng)元,以避免模型過擬合纹腌。Dropout雖有單獨(dú)的論文論述霎终,但是AlexNet將其實(shí)用化,通過實(shí)踐證實(shí)了它的效果升薯。在AlexNet中主要是最后幾個(gè)全連接層使用了Dropout莱褒。

在CNN中使用重疊的最大池化。此前CNN中普遍使用平均池化涎劈,AlexNet全部使用最大池化广凸,避免平均池化的模糊化效果。并且AlexNet中提出讓步長(zhǎng)比池化核的尺寸小蛛枚,這樣池化層的輸出之間會(huì)有重疊和覆蓋谅海,提升了特征的豐富性。
提出了LRN層蹦浦,對(duì)局部神經(jīng)元的活動(dòng)創(chuàng)建競(jìng)爭(zhēng)機(jī)制扭吁,使得其中響應(yīng)比較大的值變得相對(duì)更大,并抑制其他反饋較小的神經(jīng)元盲镶,增強(qiáng)了模型的泛化能力侥袜。

使用CUDA加速深度卷積網(wǎng)絡(luò)的訓(xùn)練,利用GPU強(qiáng)大的并行計(jì)算能力徒河,處理神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)大量的矩陣運(yùn)算系馆。AlexNet使用了兩塊GTX?580?GPU進(jìn)行訓(xùn)練,單個(gè)GTX?580只有3GB顯存顽照,這限制了可訓(xùn)練的網(wǎng)絡(luò)的最大規(guī)模由蘑。因此作者將AlexNet分布在兩個(gè)GPU上闽寡,在每個(gè)GPU的顯存中儲(chǔ)存一半的神經(jīng)元的參數(shù)。

數(shù)據(jù)增強(qiáng)尼酿,隨機(jī)地從256256的原始圖像中截取224224大小的區(qū)域(以及水平翻轉(zhuǎn)的鏡像)爷狈,相當(dāng)于增加了(256224)2*2=2048倍的數(shù)據(jù)量。如果沒有數(shù)據(jù)增強(qiáng)裳擎,僅靠原始的數(shù)據(jù)量涎永,參數(shù)眾多的CNN會(huì)陷入過擬合中,使用了數(shù)據(jù)增強(qiáng)后可以大大減輕過擬合鹿响,提升泛化能力羡微。進(jìn)行預(yù)測(cè)時(shí),則是取圖片的四個(gè)角加中間共5個(gè)位置惶我,并進(jìn)行左右翻轉(zhuǎn)妈倔,一共獲得10張圖片,對(duì)他們進(jìn)行預(yù)測(cè)并對(duì)10次結(jié)果求均值绸贡。

#coding=utf-8  
from keras.models import Sequential  
from keras.layers import Dense,Flatten,Dropout  
from keras.layers.convolutional import Conv2D,MaxPooling2D  
from keras.utils.np_utils import to_categorical  
import numpy as np  
seed = 7  
np.random.seed(seed)  
  
model = Sequential()  
model.add(Conv2D(96,(11,11),strides=(4,4),input_shape=(227,227,3),padding='valid',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))  
model.add(Conv2D(256,(5,5),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))  
model.add(Conv2D(384,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(384,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))  
model.add(Flatten())  
model.add(Dense(4096,activation='relu'))  
model.add(Dropout(0.5))  
model.add(Dense(4096,activation='relu'))  
model.add(Dropout(0.5))  
model.add(Dense(1000,activation='softmax'))  
model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])  
model.summary()  
image.png

VGGNet:用于大規(guī)模圖像識(shí)別的非常深的卷積網(wǎng)絡(luò)


image.png
#coding=utf-8  
from keras.models import Sequential  
from keras.layers import Dense,Flatten,Dropout  
from keras.layers.convolutional import Conv2D,MaxPooling2D  
import numpy as np  
seed = 7  
np.random.seed(seed)  

model = Sequential()  
model.add(Conv2D(64,(3,3),strides=(1,1),input_shape=(224,224,3),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(64,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Conv2D(128,(3,2),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(128,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
model.add(MaxPooling2D(pool_size=(2,2)))  
model.add(Flatten())  
model.add(Dense(4096,activation='relu'))  
model.add(Dropout(0.5))  
model.add(Dense(4096,activation='relu'))  
model.add(Dropout(0.5))  
model.add(Dense(1000,activation='softmax'))  
model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])  
model.summary()
image.png
import keras
base_model = keras.applications.VGG16(include_top=False,weights='imagenet',input_shape=(224,224,3))
base_model.summary()
image.png

GoogLeNet Inception V1

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盯蝴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子听怕,更是在濱河造成了極大的恐慌捧挺,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尿瞭,死亡現(xiàn)場(chǎng)離奇詭異闽烙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)声搁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門鸣峭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人酥艳,你說(shuō)我怎么就攤上這事摊溶。” “怎么了充石?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵莫换,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我骤铃,道長(zhǎng)拉岁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任惰爬,我火速辦了婚禮喊暖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撕瞧。我一直安慰自己陵叽,他們只是感情好狞尔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巩掺,像睡著了一般偏序。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胖替,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天研儒,我揣著相機(jī)與錄音,去河邊找鬼独令。 笑死端朵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的燃箭。 我是一名探鬼主播逸月,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼遍膜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瓤湘,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瓢颅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后弛说,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挽懦,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年木人,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了信柿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡醒第,死狀恐怖渔嚷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稠曼,我是刑警寧澤形病,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站霞幅,受9級(jí)特大地震影響漠吻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜司恳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一途乃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扔傅,春花似錦耍共、人聲如沸烫饼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)枫弟。三九已至,卻和暖如春鹏往,著一層夾襖步出監(jiān)牢的瞬間淡诗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工伊履, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留韩容,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓唐瀑,卻偏偏與公主長(zhǎng)得像群凶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哄辣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容