116 votes

keras : comment sauvegarder l'attribut de l'historique de formation de l'objet historique

Dans Keras, nous pouvons retourner la sortie de model.fit à une histoire 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 sauvegarder l'attribut historique de l'objet historique dans un fichier pour d'autres utilisations (par exemple, tracer des graphiques de gains ou de pertes en fonction des époques) ?

2 votes

Si cela vous aide, vous pouvez aussi bien utiliser la fonction CSVLogger() de keras, comme décrit ici : keras.io/callbacks/#csvlogger

1 votes

Quelqu'un peut-il recommander une méthode permettant de sauvegarder l'objet historique renvoyé par la fonction fit ? Il contient des informations utiles dans .params attribut que j'aimerais garder aussi. Oui, je peux sauvegarder le params & history séparément ou les combiner dans un dict, par exemple, mais je suis intéressé par un moyen simple de sauvegarder l'ensemble de la history objet.

115voto

AEndrs Points 479

Ce que j'utilise est le suivant :

    with open('/trainHistoryDict', 'wb') as file_pi:
        pickle.dump(history.history, file_pi)

De cette façon, j'enregistre l'historique sous forme de dictionnaire au cas où je voudrais ultérieurement tracer la perte ou la précision.

1 votes

Merci ! Je viens de le tester et ça marche. Je le marquerais comme la bonne réponse si je le pouvais. Je ne suis pas sûr des autres informations que contient l'objet History, mais history.history contient tout ce dont j'ai besoin.

6 votes

Par curiosité, y a-t-il une raison pour laquelle le format JSON ne pourrait pas être utilisé ici ? Contrairement au fichier pickle binaire, il s'agirait d'un fichier texte pur et facile à lire en dehors de Python (peut-être que le format JSON entraînerait des fichiers plus volumineux).

4 votes

Maintenant, comment puis-je charger le fichier exporté ?

61voto

s.k Points 2203

Une autre façon de procéder :

Comme history.history est un dict vous pouvez également le convertir en un pandas DataFrame qui peut ensuite être enregistré pour répondre à vos besoins.

Pas à pas :

import pandas as pd

# assuming you stored your model.fit results in a 'history' variable:
history = model.fit(x_train, y_train, epochs=10)

# convert the history.history dict to a pandas DataFrame:     
hist_df = pd.DataFrame(history.history) 

# save to json:  
hist_json_file = 'history.json' 
with open(hist_json_file, mode='w') as f:
    hist_df.to_json(f)

# or save to csv: 
hist_csv_file = 'history.csv'
with open(hist_csv_file, mode='w') as f:
    hist_df.to_csv(f)

0 votes

Comment le recharger ?

0 votes

Vous pouvez simplement le lire comme un cadre de données en utilisant pd.read_csv('history.csv')

1 votes

J'ai utilisé celui-ci qui est plus facile pour moi.

34voto

Arman Points 179

Le moyen le plus simple :

L'épargne :

np.save('my_history.npy',history.history)

Chargement :

history=np.load('my_history.npy',allow_pickle='TRUE').item()

Alors l'historique est un dictionnaire et vous pouvez récupérer toutes les valeurs souhaitables en utilisant les clés.

18voto

Le site model L'historique 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)

19 votes

Cela ne fonctionne plus dans tensorflow keras. J'ai eu des problèmes avec : TypeError : Object of type 'float32' is not JSON serializable. J'ai dû utiliser json.dump(str(hist.history, f)).

0 votes

@BraveDistribution Gardez à l'esprit que vous pouvez spécifier des encodeurs pour les éléments suivants json comme dans cette réponse . Alors que ce code exact ne fonctionne pas, json est toujours viable si vous spécifiez un encodeur en utilisant l'option cls argument.

12voto

Marcin Możejko Points 19602

A history Les objets ont un history est un dictionnaire qui contient différentes métriques de formation pour chaque époque de formation. Ainsi, par exemple history.history['loss'][99] retournera une perte de votre modèle dans une 100ème époque de formation. Afin d'éviter cela, vous pouvez pickle ce dictionnaire ou simplement sauvegarder différentes listes de ce dictionnaire dans un fichier approprié.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X