65 votes

Sauvegarde et chargement des poids dans keras

J'essaie d'enregistrer et de charger les poids du modèle que j'ai formé.

Le code que j'utilise pour sauvegarder le modèle est le suivant.

TensorBoard(log_dir='/output')
model.fit_generator(image_a_b_gen(batch_size), steps_per_epoch=1, epochs=1)
model.save_weights('model.hdf5')
model.save_weights('myModel.h5')

Faites-moi savoir si cette façon de faire est incorrecte ou s'il existe une meilleure façon de procéder.

mais quand j'essaie de les charger, en utilisant ceci,

from keras.models import load_model
model = load_model('myModel.h5')

mais je reçois cette erreur :


ValueError                                Traceback (most recent call 
last)
<ipython-input-7-27d58dc8bb48> in <module>()
      1 from keras.models import load_model
----> 2 model = load_model('myModel.h5')

/home/decentmakeover2/anaconda3/lib/python3.5/site-
packages/keras/models.py in load_model(filepath, custom_objects, compile)
    235         model_config = f.attrs.get('model_config')
    236         if model_config is None:
--> 237             raise ValueError('No model found in config file.')
    238         model_config = json.loads(model_config.decode('utf-8'))
    239         model = model_from_config(model_config, 
custom_objects=custom_objects)

ValueError: No model found in config file.

Avez-vous des suggestions sur ce que je pourrais faire de mal ? Merci d'avance.

110voto

blackHoleDetector Points 1079

Voici une vidéo YouTube qui explique exactement ce que vous voulez faire : Enregistrer et charger un modèle Keras

Keras met à disposition trois méthodes d'enregistrement différentes. Elles sont décrites dans le lien vidéo ci-dessus (avec des exemples), ainsi que ci-dessous.

D'abord, la raison pour laquelle vous recevez l'erreur est que vous appelez load_model incorrectement.

Pour sauvegarder et charger les poids du modèle, il faut d'abord utiliser

model.save_weights('my_model_weights.h5')

pour sauvegarder les poids, comme vous l'avez affiché. Pour charger les poids, vous devriez d'abord construire votre modèle, puis appeler load_weights sur le modèle, comme dans

model.load_weights('my_model_weights.h5')

Une autre technique d'économie est model.save(filepath) . Ce site save la fonction sauve :

  • L'architecture du modèle, permettant de recréer le modèle.
  • Les poids du modèle.
  • La configuration de la formation (perte, optimiseur).
  • L'état de l'optimiseur, permettant de reprendre l'entraînement exactement là où vous l'avez laissé.

Pour charger ce modèle sauvegardé, vous devez utiliser la procédure suivante :

from keras.models import load_model
new_model = load_model(filepath)'

Enfin, model.to_json() n'enregistre que l'architecture du modèle. Pour charger l'architecture, vous devez utiliser

from keras.models import model_from_json
model = model_from_json(json_string)

22voto

Daniel Points 2149

Pour le chargement poids vous devez d'abord avoir un modèle. Il doit l'être :

existingModel.save_weights('weightsfile.h5')
existingModel.load_weights('weightsfile.h5')     

Si vous voulez sauvegarder et charger le modèle entier (souvent cela ne fonctionne pas et je ne sais pas pourquoi) :

model.save_model('filename')
model = load_model('filename')

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