天天看點

儲存并加載keras深度學習模型

Keras是一個用于深度學習的簡單而強大的Python庫。 鑒于深度學習模式可能需要數小時、數天甚至數周的時間來教育訓練,了解如何儲存并将其從磁盤中加載是很重要的。 在本文中,您将發現如何将Keras模型儲存到檔案中

keras是用于深度學習的簡單而強大的 python 庫,鑒于深度學習模式可能需要數小時、數天甚至數周的時間來訓練,了解如何儲存并将其從發磁盤中加載是很重要的。這裡,重點講下怎麼将keras模型儲存到檔案中:

首先,keras 将儲存模型體系結構和儲存模型權重的關注點分離開來,①模型權重被儲存為HDF5格式,這是一種網格格式,适合存儲數字的多元數組;②模型結構可以用兩種格式來描述:JSON 和 YAML,本人更多關注在JSON用例上,因為json 是一種輕量級的資料交換格式。

keras 提供了 to_json() 函數将模型結構儲存成 json 格式,提供了 model_from_json() 函數加載模型結構;

keras 提供了 save_weights() 函數儲存權重,使用 load_weights() 加載權重;

注:

1.使用加載的模型前必須先編譯它;

2.如果儲存 h5 檔案是發生如下錯誤

Process finished with exit code -1073741819 (0xC0000005)

可以用更新指令解決:

pip install --upgrade h5py

# MLP for Pima Indians Dataset Serialize to JSON and HDF5
from keras.models import Sequential
from keras.layers import Dense
from keras.models import model_from_json
import numpy
import os
# fix random seed for reproducibility
numpy.random.seed(7)
# load pima indians dataset
dataset = numpy.loadtxt('pima-indians-diabetes.csv', delimiter=',')
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# create model
model = Sequential()
model.add(Dense(12, input_dim=8, kernel_initializer='uniform', activation='relu'))
model.add(Dense(8, kernel_initializer='uniform', activation='relu'))
model.add(Dense(1, kernel_initializer='uniform', activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X, Y, epochs=150, batch_size=10, verbose=0)
# evaluate the model
scores = model.evaluate(X, Y, verbose=0)
print('%s: %.2f%%' % (model.metrics_names[1], scores[1]*100))

# serialize model to JSON
model_json = model.to_json()
with open('model.json', 'w') as json_file:
    json_file.write(model_json)
# serialize weights to HDF5
model.save_weights('model.h5')
print('Saved model to disk')

# later...

# load json and create model
json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
# load weights into new model
loaded_model.load_weights('model.h5')
print('Loaded model from disk')

# evaluate loaded model on test data
loaded_model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
score = loaded_model.evaluate(X, Y, verbose=0)
print('%s: %.2f%%' % (loaded_model.metrics_names[1], score[1]*100))      

繼續閱讀