keras: comment économiser de l'histoire de la formation
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 faire pour enregistrer l'historique d'un fichier pour d'autres utilisations (par exemple, dessiner des parcelles de l'acc ou de perte contre les époques)?
- Si cela peut aider, vous pouvez aussi bien utiliser la
CSVLogger()
rappel de keras, comme décrit ici: keras.io/rappels/#csvlogger
Vous devez vous connecter pour publier un commentaire.
Ce que j'utilise est la suivante:
C'est ma façon de sauver de l'histoire comme un dictionnaire dans le cas où je veux tracer la perte ou de l'exactitude de la suite.
Un
history
objets a unhistory
champ est un dictionnaire qui organise différentes formations métriques fractionné sur toutes les formations de l'époque. Si par exemple lahistory.history['loss'][99]
sera de retour d'une perte de votre modèle dans une 100e de l'époque de la formation. Afin d'économiser que vous pourriezpickle
ce dictionnaire ou simple d'enregistrer différentes listes à partir de ce dictionnaire de fichier approprié.La
model
l'histoire peut être sauvegardée dans un fichier comme suitJe suis tombé sur le problème que les valeurs à l'intérieur de la liste dans keras ne sont pas json seriazable. Donc j'ai écrit ces deux fonctions pratiques pour mon utilisation cause.
où saveHist juste besoin d'obtenir le chemin d'accès au fichier json doit être enregistré, et l'histoire de l'objet renvoyé à partir de la keras
fit
oufit_generator
méthode.model.fit()
) pour le rechargement d'histoire. Je suis à la recherche maintenant.Une autre façon de faire:
Comme
history.history
est undict
, vous pouvez le convertir ainsi à unpandas
DataFrame
objet, qui peut ensuite être enregistré pour répondre à vos besoins.Étape par étape:
Je suis sûr qu'il ya beaucoup de façons de le faire, mais j'ai trafiqué autour et est venu avec une version de mon propre.
Tout d'abord, une fonction de rappel personnalisée permet à l'accaparement et à la mise à jour de l'histoire à la fin de chaque époque. Là j'ai aussi un rappel pour enregistrer le modèle. Ces deux sont pratiques, car en cas d'accident ou d'arrêt, vous pouvez ramasser de la formation lors de la dernière époque.
Deuxième, voici quelques 'helper' fonctions pour faire exactement les choses qu'ils disent qu'ils font. Ces sont tous appelés à partir de la
LossHistory()
de rappel.Après cela, tous vous avez besoin est de mettre en
history_filename
à quelque chose commedata/model-history.json
, ainsi que de définirmodel_filesname
à quelque chose commedata/model.h5
. Un dernier tweak pour faire en sorte de ne pas gâcher votre histoire à la fin de la formation, en supposant que vous arrêtez et démarrez, ainsi que le bâton dans les rappels, est pour ce faire:Chaque fois que vous voulez,
history = loadHist(history_filename)
obtient votre histoire.La funkiness vient du json et les listes, mais je n'étais pas en mesure de le faire fonctionner sans la convertir en une itération. De toute façon, je sais que cela fonctionne parce que j'ai été manivelle sur elle pendant des jours maintenant. Le
pickled.dump
réponse à https://stackoverflow.com/a/44674337/852795 peut-être mieux, mais je ne sais pas ce que c'est. Si j'ai manqué de quoi que ce soit ici ou vous ne pouvez pas l'obtenir pour travailler, laissez-moi savoir.