1. 為何要用Keras
如今在這個深度學(xué)習(xí)大火的時候,第三方工具也層出不窮血淌,比較出名的有Tensorflow顽馋,Caffe谓厘,Theano,MXNet寸谜,在如此多的第三方框架中頻繁的更換無疑是很低效的竟稳,只要你能夠好好掌握好其中一個框架,熟悉其原理熊痴,那么之后因?yàn)楦鞣N要求你想要更換框架也是很容易的他爸。
那么sherlock用的是哪個框架呢?sherlock使用的是Google的開源框架Tensorflow果善,因?yàn)镚oogle開源了tensorflow之后其社區(qū)非痴矬裕活躍,而且版本更新也非常穩(wěn)定巾陕,所以我就選擇了這個框架盏混。對于框架之爭,在知乎上已經(jīng)有很多人在撕逼了惜论,這個就好比哪種編程語言好這個問題一樣许赃。對于我們來講,選擇一個穩(wěn)定的框架馆类,好好的學(xué)習(xí)deep learning才是重中之重混聊,對于哪種框架更好的問題,我們學(xué)好之后自然有自己的見解乾巧,所以前期切忌在刷知乎聽完大神撕逼之后頻繁更換框架句喜。
對于Tensorflow的安裝,以及CPU和GPU版本沟于,各種系統(tǒng)的安裝網(wǎng)上已經(jīng)有很多人詳細(xì)的寫過攻略了咳胃,可以自己去網(wǎng)上搜一搜,很容易就可以安裝成功旷太。
那么我們選擇了Tensorflow之后展懈,我們就可以愉快的開始我們的深度學(xué)習(xí)之旅了销睁。去Tensorflow的中文社區(qū),可以看到有一些新手教程存崖,網(wǎng)上也有很多學(xué)習(xí)材料冻记,推薦看看stanford大學(xué)cs224d的課件,http://cs224d.stanford.edu/lectures/CS224d-Lecture7.pdf来惧, 很詳細(xì)的介紹了tensorflow冗栗。然后你就可以寫tensorflow的程序了。雖然說tensorflow已經(jīng)是一個封裝好的框架供搀,但是你發(fā)現(xiàn)你寫一個簡單的神經(jīng)網(wǎng)絡(luò)也需要很多行才能夠?qū)懲暧缇樱@個時候,就有很多的第三方插架來幫助你寫網(wǎng)絡(luò)葛虐,也就是說你用tensorflow要寫10行胎源,第三方插架幫你封裝了一個函數(shù),就是把這10行集合在這個函數(shù)里面挡闰,那么你用1行,傳入相同的參數(shù)掰盘,就能夠達(dá)到10行相同的效果摄悯,如此簡便并且節(jié)約時間,可以幫助我們很快的實(shí)現(xiàn)我們的想法愧捕。
https://keras.io/ 這個就是Keras的官方文檔奢驯,里面可以查閱所有的函數(shù),并且可以在github上看他的開源代碼次绘,非常方便瘪阁。安裝也很簡單,打開終端邮偎,輸入pip install keras 就可以等待安裝了管跺。
下面就給一個簡單的例子,來看一看Keras到底有多簡單禾进。
from keras.models import Sequential
model = Sequential()
引入sequential豁跑,這個就是一個空的網(wǎng)絡(luò)結(jié)構(gòu),并且這個結(jié)構(gòu)是一個順序的序列泻云,所以叫Sequential艇拍,Keras里面還有一些其他的網(wǎng)絡(luò)結(jié)構(gòu)。
from keras.layers import Dense, Activation
model.add(Dense(units=64, input_dim=100))
model.add(Activation('relu'))
model.add(Dense(units=10))
model.add(Activation('softmax'))
可以看到加入層很簡單宠纯,只需要寫.add卸夕,后面是要加的層的類型。
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
一旦你寫好了網(wǎng)絡(luò)之后婆瓜,就可以用compile編譯整個網(wǎng)絡(luò)快集,看參數(shù)設(shè)置有沒有問題
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))
你也可以自定義其中的優(yōu)化函數(shù),就像上面這樣,'sgd'是Keras已經(jīng)寫好了一些默認(rèn)參數(shù)的優(yōu)化函數(shù)碍讨,你可以自己重新定義參數(shù)治力,得到一個優(yōu)化函數(shù)。
model.fit(x_train, y_train, epochs=5, batch_size=32)
這個就像scikit-learn一樣訓(xùn)練模型勃黍。
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)
這個就是評估訓(xùn)練結(jié)果宵统。
classes = model.predict(x_test, batch_size=128)
或者是通過predict進(jìn)行預(yù)測。
看了上面的代碼覆获,相信很多熟悉scikit-learn的同學(xué)都很親切马澈,因?yàn)榇_實(shí)很簡便,跟scikit-learn也有著類似的語法弄息。
通過上面的例子痊班,配置了我們學(xué)習(xí)深度學(xué)習(xí)的環(huán)境,下次的文章將開始學(xué)習(xí)CNN摹量。