Keras是一個(gè)極度簡(jiǎn)化、高度模塊化的神經(jīng)網(wǎng)絡(luò)第三方庫(kù)。基于Python+Tensorflow開(kāi)發(fā),充分發(fā)揮了GPU和CPU操作。其開(kāi)發(fā)目的是為了更快的做神經(jīng)網(wǎng)絡(luò)實(shí)驗(yàn)。適合前期的網(wǎng)絡(luò)原型設(shè)計(jì)、支持卷積網(wǎng)絡(luò)和反復(fù)性網(wǎng)絡(luò)以及兩者的結(jié)果、支持人工設(shè)計(jì)的其他網(wǎng)絡(luò)、在GPU和CPU上運(yùn)行能夠無(wú)縫連接。
0. windows用戶如何安裝Keras框架?
用pip方式安裝很簡(jiǎn)單。即打開(kāi)cmd,輸入pip install keras,然后等待安裝完畢即可。會(huì)自動(dòng)安裝需要的組件。
1. 怎么保存Keras模型?
(1) 如果只保存模型結(jié)構(gòu),代碼如下:
#save as JSON
json_string = model.to_json()
# save as YAML
yaml_string = model.to_yaml()
# model reconstruction from JSON:
from keras.modelsimport model_from_json
model = model_from_json(json_string)
# model reconstruction from YAML
model =model_from_yaml(yaml_string)
(2) 如果需要保存數(shù)據(jù):
model.save_weights('my_model_weights.h5')
model.load_weights('my_model_weights.h5')
(3) 綜合運(yùn)用:
json_string = model.to_json()
open('my_model_architecture.json','w').write(json_string)
model.save_weights('my_model_weights.h5')
model = model_from_json(open('my_model_architecture.json').read())
model.load_weights('my_model_weights.h5')
2. 為什么訓(xùn)練損失比測(cè)試損失要大?
Keras有兩種模型:訓(xùn)練和測(cè)試。規(guī)則化,比如Dropout和L1/L2,在測(cè)試時(shí)關(guān)閉了。
另外,訓(xùn)練損失是每一次訓(xùn)練batch的平均損失。模型因?yàn)樵跁r(shí)刻變化,最開(kāi)始的batch損失肯定要比最后的batches損失要高。另一方面,每一次epoch損失使用最后的epoch計(jì)算,因此返回的結(jié)果就比較小。
3 如何用Keras處理不適合存放在內(nèi)存中的數(shù)據(jù)集?
Batch trainingusingmodel.train_on_batch(X, y)和model.test_on_batch(X, y)參考文檔:modelsdocumentation。
You can also see batch training in action inour CIFAR10example.
4 當(dāng)驗(yàn)證損失不再繼續(xù)降低時(shí),如何中斷訓(xùn)練?
用EarlyStopping回調(diào)函數(shù),代碼如下:
from keras.callbacksimport EarlyStopping
early_stopping =EarlyStopping(monitor='val_loss', patience=2)
model.fit(X, y, validation_split=0.2, callbacks=[early_stopping])
5 在訓(xùn)練時(shí),數(shù)據(jù)會(huì)被隨機(jī)打亂嗎?
如果model.fit中的參數(shù)suffle=True時(shí),會(huì)隨機(jī)打算每一次epoch的數(shù)據(jù)。(默認(rèn)打亂)
但是驗(yàn)證數(shù)據(jù)默認(rèn)不會(huì)打亂。
6 如何記錄每一次epoch的訓(xùn)練/驗(yàn)證損失/準(zhǔn)確度?
Model.fit函數(shù)會(huì)返回一個(gè) History 回調(diào),該回調(diào)有一個(gè)屬性history包含一個(gè)封裝有連續(xù)損失/準(zhǔn)確的lists。代碼如下:
hist = model.fit(X, y,validation_split=0.2)
print(hist.history)
7 如何讓我的Keras腳本每次產(chǎn)生確定的數(shù)據(jù)?
在引入Kerans之前,引入numpy,并且用其random.seed(種子)產(chǎn)生一個(gè)隨機(jī)數(shù)對(duì)象。這樣在相同硬件的機(jī)器上運(yùn)行時(shí),每次產(chǎn)生的隨機(jī)數(shù)的順序都是一樣的。
import numpyas np
np.random.seed(1234)
# Keras imports start here
from kerasimport ...