我正在使用Keras训练深度神经网络,并寻找一种方法来保存并稍后加载keras.callbacks.History
类型的历史对象。这是设置:
history_model_1 = model_1.fit_generator(train_generator,
steps_per_epoch=100,
epochs=20,
validation_data=validation_generator,
validation_steps=50)
history_model_1
是我希望在另一个Python会话期间保存和加载的变量。
答案 0 :(得分:7)
history_model_1
是一个回调对象。它包含各种数据,并且不可序列化。
但是,它包含一个字典,其中包含您实际要保存的所有值(参见您的评论):
import json
# Get the dictionary containing each metric and the loss for each epoch
history_dict = history_model_1.history
# Save it under the form of a json file
json.dump(history_dict, open(your_history_path, 'w'))
您现在可以像这样访问第50世纪的损失值:
print(history_dict['loss'][49])
用
重新加载history_dict = json.load(open(your_history_path, 'r'))
我希望这会有所帮助。
答案 1 :(得分:6)
您可以创建一个类,以便具有相同的结构,并且在两种情况下都可以使用相同的代码进行访问。
import pickle
class History_trained_model(object):
def __init__(self, history, epoch, params):
self.history = history
self.epoch = epoch
self.params = params
with open(savemodel_path+'/history', 'wb') as file:
model_history= History_trained_model(history.history, history.epoch, history.params)
pickle.dump(model_history, file, pickle.HIGHEST_PROTOCOL)
然后访问它:
with open(savemodel_path+'/history', 'rb') as file:
history=pickle.load(file)
print(history.history)
答案 2 :(得分:5)
您可以使用Pandas将历史记录对象另存为CSV文件。
import pandas as pd
pd.DataFrame.from_dict(history_model_1.history).to_csv('history.csv',index=False)
JSON方法产生TypeError: Object of type 'float32' is not JSON serializable
。原因是历史字典中的对应值是NumPy数组。