I'm training a deep neural net using Keras and looking for a way to save and later load the history object which is of keras.callbacks.History
type. Here's the setup:
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
is the variable I want to be saved and loaded during another Python session.
keras.callbacks.History() Callback that records events into a History object. This callback is automatically applied to every Keras model. The History object gets returned by the fit method of models.
We can use the Keras callback keras. callbacks. ModelCheckpoint() to save the model at its best performing epoch.
You can save an entire model to a single artifact. It will include: The model's architecture/config. The model's weight values (which were learned during training)
history_model_1
is a callback object. It contains all sorts of data and isn't serializable.
However, it contains a dictionnary with all the values that you actually want to save (cf your comment) :
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'))
You can now access the value of the loss at the 50th epoch like this :
print(history_dict['loss'][49])
Reload it with
history_dict = json.load(open(your_history_path, 'r'))
I hope this helps.
You can create a class so you will have the same structure and you can access in both cases with the same code.
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)
then to access it:
with open(savemodel_path+'/history', 'rb') as file:
history=pickle.load(file)
print(history.history)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With