web-dev-qa-db-fra.com

Initialiseur inconnu: GlorotUniform lors du chargement du modèle Keras

J'ai formé mon CNN (VGG) via google colab et généré un fichier .h5. Maintenant, le problème est que je peux prédire ma sortie avec succès via Google Colab, mais lorsque je télécharge ce fichier de modèle formé .h5 et que je tente de prédire la sortie sur mon ordinateur portable, le message d'erreur s'affiche lors du chargement du modèle.

Voici le code:

import tensorflow as tf
from tensorflow import keras
import h5py

# Initialization

loaded_model = keras.models.load_model('./train_personCount_model.h5')

Et l'erreur:

ValueError: Unknown initializer: GlorotUniform
5
Dhruvin modi

J'ai rencontré le même problème. Après avoir changé:

from tensorflow import keras

à:

import keras

la vie vaut encore une fois la peine d'être vécue.

3
lintex

Wow, je viens de passer 6 heures de ma vie à essayer de comprendre cela. Dmitri a posté une solution à cela ici: J'ai formé un modèle de keras sur google colab. Impossible de le charger localement sur mon système.

En gros, je le republie ici parce que cela a fonctionné pour moi.

Cela ressemble à une sorte de problème de sérialisation dans keras. Si vous enveloppez votre load_model avec la chose ci-dessous CustomObjectScope ... tout devrait fonctionner ...

import keras
from keras.models import load_model
from keras.utils import CustomObjectScope
from keras.initializers import glorot_uniform

with CustomObjectScope({'GlorotUniform': glorot_uniform()}):
        model = load_model('imdb_mlp_model.h5')
4
Alex Begun

J'ai eu le même problème et cela a été corrigé. mais ne sauvegardez pas l'optimiseur avec le modèle! changez simplement la ligne de sauvegarde comme ceci:

the_model.save(file_path,True/False,False)

Le deuxième paramètre indique à Keras d’écraser le modèle si le fichier existe ou non et le troisième lui dit de ne pas enregistrer l’optimiseur avec le modèle.


Edit : J'ai couru le problème à nouveau sur un autre système aujourd'hui et cela ne m'a pas aidé cette fois-ci. J'ai donc sauvegardé le modèle conf comme json et les poids h5 et les ai utilisés pour reconstruire le modèle sur une autre machine. vous pouvez le faire comme ceci . enregistrer comme ceci:

json = model.to_json()
# Save the json on a file
model.save_weights(weights_filepath,save_format="h5")

reconstruisez le modèle comme ceci:

# load the json file
# here i use json as loaded content of json file
model = keras.models.model_from_json(json)
model.load_weights(weights_file_path)
0
Babakslt

J'ai résolu le problème:

Avant:

from keras.models import load_model classifierLoad = load_model('model/modeltest.h5')

Travaille pour moi

import tensorflow as tf classifierLoad = tf.keras.models.load_model('model/modeltest.h5')