wake-up-neo.com

Unbekannter Initialisierer: GlorotUniform beim Laden des Keras-Modells

Ich habe mein CNN (VGG) über google colab trainiert und die .h5-Datei generiert. Jetzt ist das Problem, ich kann meine Ausgabe erfolgreich über Google Colab vorhersagen, aber wenn ich die .h5-Datei mit dem trainierten Modell herunterlade und versuche, die Ausgabe auf meinem Laptop vorherzusagen, erhalte ich beim Laden des Modells eine Fehlermeldung.

Hier ist der Code:

import tensorflow as tf
from tensorflow import keras
import h5py

# Initialization

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

Und der Fehler:

ValueError: Unknown initializer: GlorotUniform
5
Dhruvin modi

Ich bin auf die gleiche Ausgabe gestoßen. Nach dem Wechsel:

from tensorflow import keras

zu:

import keras

das leben ist wieder lebenswert.

3
lintex

Ändern

from keras.models import load_model

bis

from tensorflow.keras.models import load_model

mein Problem gelöst!

Um Fehler zu beseitigen, importieren Sie alle Dinge direkt aus Keras oder TensorFlow. Das Mischen von beiden im selben Projekt kann zu Problemen führen.

8
0x01h

Wow, ich habe gerade 6 Stunden meines Lebens damit verbracht, das herauszufinden. Dmitri hat hier eine Lösung dazu geschrieben: Ich habe ein Keras-Modell auf google colab trainiert. Kann jetzt nicht lokal auf meinem System geladen werden.

Ich poste es hier im Grunde nur neu, weil es für mich funktioniert hat.

Das sieht aus wie eine Art Serialisierungsfehler in Keras. Wenn Sie Ihr load_model mit dem untenstehenden CustomObjectScope-Ding einhüllen ... sollten alle funktionieren.

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

Etwas das hat mir geholfen, was in keiner der Antworten vorkommt:

custom_objects={'GlorotUniform': glorot_uniform()}

2
M. Viaz

wenn Sie die Architektur und die Gewichte separat laden, während Sie die Architektur des Modells laden, ändern Sie Folgendes:

models.model_from_json(json)

zu:

tf.keras.models.model_from_json(json)

und das problem ist gelöst

1
Azizi ilias

Ich hatte das gleiche Problem und wurde auf diese Weise behoben. Speichern Sie den Optimierer einfach nicht mit dem Modell! Ändern Sie einfach die Sicherungszeile wie folgt:

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

Der zweite Parameter weist Keras an, das Modell zu überschreiben, falls die Datei vorhanden war oder nicht, und der dritte Parameter weist ihn an, das Optimierungsprogramm nicht mit dem Modell zu speichern.


Edit : Ich habe das Problem heute auf einem anderen System noch einmal überarbeitet und dies hat mir diesmal nicht weitergeholfen. also speicherte ich das modell conf als json und die gewichte als h5 und benutzte sie, um das modell auf einer anderen maschine wieder aufzubauen. Sie können es so machen.

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

baue das Modell so auf:

# 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

Ich hatte das gleiche Problem mit einem Modell, das mit tensorflow 11.1.0 (unter Verwendung von tensorflow.python.keras.models.save_model) erstellt und mit tensoflow 1.11.0 (unter Verwendung von tensorflow.python.keras.models.load_model) geladen wurde.

Ich habe es gelöst, indem ich alles auf Tensorflow 1.13.1 aufgerüstet habe. Nachdem ich das Modell mit der neuen Version neu erstellt habe, konnte ich es ohne diesen Fehler laden.

0
Benjamin
from tensorflow.keras.initializers import glorot_uniform

loaded_model = tf.keras.models.load_model("pruned.h5",custom_objects={'GlorotUniform': glorot_uniform()})

das hat bei mir beim Import von Tensorflow-Keras funktioniert

0
Josh Anish

Ich habe das Problem behoben:

Vor:

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

Funktioniert bei mir

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