web-dev-qa-db-fra.com

Erreur lors du chargement de l'optimiseur enregistré. keras python framboise

J'ai formé un modèle séquentiel de keras dans une machine Linux 64 et enregistré dans un fichier .h5.

Sur ce PC, je peux charger le modèle et faire des prédictions sans problème.

Maintenant, j'implémente la prédiction dans un Raspberry Pi 3 qui a installé les keras, tensorflow, h5py et python3.

quand je charge le modèle

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

, Je suis en train:

usr/lib/python3.4/importlib/_bootstrap.py:321: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
return f(*args, **kwds)

/usr/local/lib/python3.4/dist-packages/keras/models.py:291: UserWarning: Error in loading the saved optimizer state. As a result, your model is starting with a freshly initialized optimizer.
warnings.warn('Error in loading the saved optimizer '

Mais ... on dirait qu'il prédit bien.

Comment puis-je éviter ce message d'avertissement?

7
Mquinteiro

load_model Crée d'abord l'architecture du modèle enregistré avec ses poids enregistrés, puis essaie de créer l'optimiseur enregistré avec ses poids enregistrés.

Cependant, vous obtenez un message d'erreur car il existe une incompatibilité entre la forme des pondérations de l'optimiseur enregistrées et la forme des pondérations attendues par l'optimiseur en fonction de l'architecture du modèle chargé.

J'ai rencontré ce problème en utilisant Keras 2.1.4 lorsque j'ai essayé d'enregistrer et de recharger un modèle dont les sous-modèles internes étaient définis sur trainable=False. Ces informations ne semblent pas être conservées lorsque vous enregistrez le modèle, donc après la réinstauration du sous-modèle interne est défini sur trainable=True Et l'optimiseur s'attendrait à plus de poids enregistrés que ce qui était réellement enregistré. Si cela pourrait être le problème dans votre cas, j'ai décrit une solution de contournement dans ce rapport de bogue :

  1. Définir explicitement la formabilité de toutes les couches du modèle interne
  2. Juste avant l'enregistrement, les indicateurs de capacité d'entraînement de toutes les couches doivent être définis sur l'état qu'ils avaient au moment de la compilation du modèle

Si vous souhaitez vous débarrasser de l'avertissement et que vous n'avez pas besoin de l'optimiseur après avoir enregistré de toute façon, vous pouvez également enregistrer votre modèle sans l'optimiseur: utilisez model.save(filename, include_optimizer=False)

14
KiraMichiru