keras的学习笔记
簡介
Keras是一個(gè)高層神經(jīng)網(wǎng)絡(luò)API,Keras由純Python編寫而成并基于Tensorflow、Theano和CNTK后端。Keras 支持快速實(shí)驗(yàn),能夠把你的idea迅速轉(zhuǎn)換為結(jié)果,適用場景:
- 簡易和快速的原型設(shè)計(jì)(keras具有高度模塊化,極簡,和可擴(kuò)充特性)
- 支持CNN和RNN,或二者的結(jié)合
- 無縫CPU和GPU切換
Keras適用的Python版本是:Python 2.7-3.6
keras的使用
Keras的核心數(shù)據(jù)結(jié)構(gòu)是“模型”,模型是一種組織網(wǎng)絡(luò)層的方式。Keras中主要的模型是Sequential模型,Sequential是一系列網(wǎng)絡(luò)層按順序構(gòu)成的棧。
Sequential模型如下:
| 1 2 3 4 5 6 7 8 9 | from keras.models import Sequential from keras.layers import Dense, Activation model = Sequential() model.add(Dense(units=64, input_dim=100)) model.add(Activation("relu")) model.add(Dense(units=10)) model.add(Activation("softmax")) |
在Keras 0.x中,模型其實(shí)有兩種,一種叫Sequential,稱為序貫?zāi)P?#xff0c;也就是單輸入單輸出,一條路通到底,層與層之間只有相鄰關(guān)系,跨層連接統(tǒng)統(tǒng)沒有。這種模型編譯速度快,操作上也比較簡單。第二種模型稱為Graph,即圖模型,這個(gè)模型支持多輸入多輸出,層與層之間想怎么連怎么連,但是編譯速度慢。在Keras1和Keras2中,圖模型被移除,而增加了了“functional model API”,這個(gè)東西,更加強(qiáng)調(diào)了Sequential是特殊情況這一點(diǎn)。一般的模型就稱為Model,然后如果你要用簡單的Sequential,OK,那還有一個(gè)快捷方式Sequential。
另外還可以通過將一個(gè)層列表傳遞到構(gòu)建器的方式創(chuàng)建Sequential:
| 1 2 3 4 5 6 | model = Sequential([ Dense(32, input_shape=(784,)), Activation('relu'), Dense(10), Activation('softmax'), ]) |
模型需要知道預(yù)期的輸入形狀,因此Sequential模型的第一層(只需第一層,因?yàn)楹竺娴膶幽茏詣?dòng)計(jì)算形狀)需要收到輸入形狀的信息。有幾種方式可以實(shí)現(xiàn):
*將input_shape申明傳入第一層。這是一個(gè)形狀元組(整數(shù)或None,None意味可能是任意正整數(shù)),這里不包含批次維度。
*一些2D層如Dense,通過申明input_dim支持指明輸入形狀,一些3D的時(shí)序?qū)又С稚昝鱥nput_dim和input_length。
*如果需要指明固定的輸入批次規(guī)模(對(duì)狀態(tài)循環(huán)網(wǎng)絡(luò)有用),可以將batch_size申明傳入一個(gè)層。如果傳入batch_size=32和input_shape(6, 8)至一個(gè)層,它將期望所有輸入批次形狀為(32,6,8)。
完成模型的搭建后,我們需要使用.compile()方法來編譯模型:
| 1 | model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) |
編譯,訓(xùn)練模型前應(yīng)設(shè)置學(xué)習(xí)進(jìn)程,通過compile方法實(shí)現(xiàn),它接受3個(gè)申明:
- 優(yōu)化器,可以是現(xiàn)成的優(yōu)化器如rmsprop或者adagrad,或者是自定義Optimizer類的實(shí)例。
- 損失函數(shù),模型要最小化的對(duì)象,可以是現(xiàn)成的如categorical_crossentropy或者mse,或者自定義。
- 度量列表,對(duì)于分類問題我們使用metrics=[‘a(chǎn)ccuracy’],可以是其它現(xiàn)成度量或自定義。
| 1 2 3 | # 自定義模型的相關(guān)參數(shù) from keras.optimizers import SGD model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True)) |
lr表示學(xué)習(xí)速率,momentum表示動(dòng)量項(xiàng),decay是學(xué)習(xí)速率的衰減系數(shù)(每個(gè)epoch衰減一次),Nesterov的值是False或者True,表示使不使用Nesterov momentum。
完成模型編譯后,我們?cè)谟?xùn)練數(shù)據(jù)上按batch進(jìn)行一定次數(shù)的迭代來訓(xùn)練網(wǎng)絡(luò)
| 1 | model.fit(x_train, y_train, epochs=5, batch_size=32) |
當(dāng)然,我們也可以手動(dòng)將一個(gè)個(gè)batch的數(shù)據(jù)送入網(wǎng)絡(luò)中訓(xùn)練,這時(shí)候需要使用:
| 1 | model.train_on_batch(x_batch, y_batch) |
隨后,我們可以使用一行代碼對(duì)我們的模型進(jìn)行評(píng)估,看看模型的指標(biāo)是否滿足我們的要求:
| 1 | loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128) |
或者,我們可以使用我們的模型,對(duì)新的數(shù)據(jù)進(jìn)行預(yù)測:
| 1 | classes = model.predict(x_test, batch_size=128) |
Keras提供了三種后端引擎Theano/Tensorflow/CNTK,并將其函數(shù)統(tǒng)一封裝,使得用戶可以以同一個(gè)接口調(diào)用不同后端引擎的函數(shù)。
- Theano是一個(gè)開源的符號(hào)主義張量操作框架,由蒙特利爾大學(xué)LISA/MILA實(shí)驗(yàn)室開發(fā)。
- TensorFlow是一個(gè)符號(hào)主義的張量操作框架,由Google開發(fā)。
- CNTK是一個(gè)由微軟開發(fā)的商業(yè)級(jí)工具包。
將backend字段的值改寫為你需要使用的后端:theano或tensorflow或者CNTK,即可完成后端的切換。我們也可以通過定義環(huán)境變量KERAS_BACKEND來覆蓋上面配置文件中定義的后端:
| 1 2 | KERAS_BACKEND=tensorflow python -c "from keras import backend;" Using TensorFlow backend |
張量可以看作是向量、矩陣的自然推廣,我們用張量來表示廣泛的數(shù)據(jù)類型。
參考:
總結(jié)
以上是生活随笔為你收集整理的keras的学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 央行降准,房价可能又要骚动了!
- 下一篇: ISP-坏点校正(DPC)