Hacemos una revisión exhaustiva cada enunciados en nuestro sitio web con la meta de mostrarte en todo momento información con la mayor veracidad y actual.
Solución:
history_model_1
es un objeto de devolución de llamada. Contiene todo tipo de datos y no es serializable.
Sin embargo, contiene un diccionario con todos los valores que realmente desea guardar (consulte su comentario):
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'))
Ahora puede acceder al valor de la pérdida en la época 50 de esta manera:
print(history_dict['loss'][49])
recargarlo con
history_dict = json.load(open(your_history_path, 'r'))
Espero que esto ayude.
Puedes crear una clase para que tengas la misma estructura y puedas acceder en ambos casos con el mismo código.
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)
luego para acceder:
with open(savemodel_path+'/history', 'rb') as file:
history=pickle.load(file)
print(history.history)
Puede usar Pandas para guardar el objeto de historial como un archivo CSV.
import pandas as pd
pd.DataFrame.from_dict(history_model_1.history).to_csv('history.csv',index=False)
El enfoque JSON da como resultado un TypeError: Object of type 'float32' is not JSON serializable
. La razón de esto es que los valores correspondientes en el diccionario histórico son matrices NumPy.
Finalizando este artículo puedes encontrar los comentarios de otros gestores de proyectos, tú además puedes mostrar el tuyo si te apetece.