Dans Keras, nous pouvons renvoyer la sortie de model.fit
à un historique comme suit:
history = model.fit(X_train, y_train,
batch_size=batch_size,
nb_Epoch=nb_Epoch,
validation_data=(X_test, y_test))
Maintenant, comment enregistrer l’historique dans un fichier pour un usage ultérieur (par exemple, tracer des parcelles d’acc ou de perte en fonction des époques)?
Ce que j'utilise est le suivant:
with open('/trainHistoryDict', 'wb') as file_pi:
pickle.dump(history.history, file_pi)
De cette façon, je sauvegarde l'historique sous forme de dictionnaire au cas où je souhaiterais tracer la perte ou l'exactitude ultérieurement.
Un objet history
a un champ history
est un dictionnaire qui contient différentes mesures de formation couvrant toutes les époques de formation. Donc, par exemple history.history['loss'][99]
retournera une perte de votre modèle dans une 100e époque de formation. Afin de sauvegarder que vous pourriez pickle
ce dictionnaire ou simplement sauvegarder différentes listes de ce dictionnaire dans un fichier approprié.
L’historique model
peut être sauvegardé dans un fichier comme suit
import json
hist = model.fit(X_train, y_train, epochs=5, batch_size=batch_size,validation_split=0.1)
with open('file.json', 'w') as f:
json.dump(hist.history, f)
Je suis tombé sur le problème que les valeurs à l’intérieur de la liste dans keras ne sont pas json correctes. Par conséquent, j'ai écrit ces deux fonctions pratiques pour ma cause d'utilisation.
import json,codecs
import numpy as np
def saveHist(path,history):
new_hist = {}
for key in list(history.history.keys()):
if type(history.history[key]) == np.ndarray:
new_hist[key] == history.history[key].tolist()
Elif type(history.history[key]) == list:
if type(history.history[key][0]) == np.float64:
new_hist[key] = list(map(float, history.history[key]))
print(new_hist)
with codecs.open(path, 'w', encoding='utf-8') as f:
json.dump(new_hist, f, separators=(',', ':'), sort_keys=True, indent=4)
def loadHist(path):
with codecs.open(path, 'r', encoding='utf-8') as f:
n = json.loads(f.read())
return n
où saveHist doit simplement obtenir le chemin où le fichier json doit être enregistré et l'objet historique renvoyé par la méthode keras fit
ou fit_generator
.