如何从 hkl 或任何保存的 keras 配置中重建 keras 模型?
Posted
技术标签:
【中文标题】如何从 hkl 或任何保存的 keras 配置中重建 keras 模型?【英文标题】:How to rebuild a keras model from a saved keras config in a hkl or any? 【发布时间】:2018-08-09 16:53:02 【问题描述】:我有以下代码可以训练模型并将其保存到 hickle 文件中(也可以是任何类型的文件)
from keras import Sequential
from keras.layers import Dense
from keras.models import load_model
import hickle as hkl
import numpy as np
class Model:
def __init__(self, data=None):
self.data = data
self.metrics = []
self.model = self.__build_model()
def __build_model(self):
model = Sequential()
model.add(Dense(4, activation='relu', input_shape=(3,)))
model.add(Dense(1, activation='relu'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
return model
def train(self, epochs):
self.model.fit(self.data[:, :-1], self.data[:,-1], epochs=epochs)
return self
def test(self, data):
self.metrics = self.model.evaluate(data[:, :-1], data[:, -1])
return self
def predict(self, input):
return self.model.predict(input)
def save(self, path):
data = 'metrics': self.metrics, 'k_model': self.model.get_config()
hkl.dump(data, path, mode='w')
return self
def load(self, path):
data = hkl.load('model.hkl')
self.metrics = data['metrics']
self.model = Sequential.from_config(data['k_model'])
return self
def train():
train_data = np.random.rand(1000, 4)
test_data = np.random.rand(100, 4)
print("TRAINING, TESTING & SAVING..")
model = Model(train_data)\
.train(epochs=5)\
.test(test_data)\
.save('./model.hkl')
print('metrics: ', model.metrics)
conf = model.model.get_config()
print("type: ", type(conf))
print("length: ", len(conf))
if __name__ == '__main__':
train()
print('USING SAVED MODEL..')
model = Model()
model.load('./model.hkl')
print(model.metrics)
这会打印错误
TypeError: type object argument after ** must be a mapping, not PyContainer
怎么了?错误形式是 keras 还是来自 hickle?
注意。这里我只是保存指标,但它可以包含任何其他附加信息
谢谢。
【问题讨论】:
【参考方案1】:我在另一个问题上回答了类似的问题。这就是我一直保存 keras 模型的方式:
model.save('model.h5')
model_json = model.to_json()
with open("model.json", "w") as json_file:
json_file.write(model_json)
用于加载保存的模型:
model = load_model('model_w1.h5')
打印出摘要:
model.summary()
再次训练,加载后可以直接使用fit
。
如果您想在某些应用程序中使用它,那么首先使其成为全局(无需为每个预测重新加载)加载模型,然后是其权重:
def load_model():
global model
json_file = open('model.json', 'r')
model_json = json_file.read()
model = model_from_json(model_json)
model.load_weights("model.h5")
model._make_predict_function()
【讨论】:
以上是关于如何从 hkl 或任何保存的 keras 配置中重建 keras 模型?的主要内容,如果未能解决你的问题,请参考以下文章