webentwicklung-frage-antwort-db.com.de

TypeError: Unerwartetes Schlüsselwortargument an Optimierer übergeben: learning_rate

Ich versuche, ein Keras-Modell zu laden, das auf einem Azure VM (NC-Promo) trainiert wurde. Es wird jedoch der folgende Fehler angezeigt.

TypeError: Unerwartetes Schlüsselwortargument an Optimierer übergeben: learning_rate

BEARBEITEN:

Hier ist das Code-Snippet, mit dem ich mein Modell lade:

from keras.models import load_model
model = load_model('my_model_name.h5')
9
Chayan Bansal

Ich habe es behoben, indem ich die Tensorflow-Bibliothek (mit einer aktualisierten Version) neu installiert und die Datei nvcuda.dll im Ordner system32 abgelegt habe.

0
Chayan Bansal

Haben Sie einen benutzerdefinierten Optimierer verwendet?

Wenn ja, können Sie wie folgt laden:

model = load_model('my_model_name.h5', custom_objects={
    'Adam': lambda **kwargs: hvd.DistributedOptimizer(keras.optimizers.Adam(**kwargs))
})

Alternativ können Sie Ihr Modell mit model = load_model('my_model_name.h5', compile=False) laden und dann einen Optimierer hinzufügen und neu kompilieren. Dadurch gehen jedoch Ihre gespeicherten Gewichte verloren.

7
Rob Bricheno

ich habe den gleichen Fehler erhalten, als ich auf zwei verschiedenen PCs gearbeitet habe. In einigen Versionen von Tensorflow ist tf.keras.optimizers.SGD (lr = x), während in anderen Versionen istf.keras.optimizers.SGD (Lernrate = x) ist.

7
Walter Jacquet

Das ist mir auch passiert. Höchstwahrscheinlich, weil die learning_rate wurde im September 2018 von Version 2.2. * auf 2.3.0 umbenannt (siehe Versionshinweise: https://github.com/keras-team/keras/releases : Benennen Sie lr in learning_rate um alle Optimierer.)

Das hat bei mir funktioniert: Sudo pip install keras --upgrade

6
MichaelF

In meinem Fall habe ich festgestellt, dass die beste Lösung darin besteht, mit h5py den Namen der Variablen von "learning_rate" -> "lr" zu ändern, wie in den vorherigen Beiträgen vorgeschlagen.

import h5py
data_p = f.attrs['training_config']
data_p = data_p.decode().replace("learning_rate","lr").encode()
f.attrs['training_config'] = data_p
f.close()
4
felipk101

Ich hatte das gleiche Problem. Mit Keras Version 2.3.1 und TensorFlow-GPU Version 1.13 musste ich Tensorflow-GPU auf Version 1.15 aktualisieren

pip uninstall tensorflow-gpu
pip install tensorflow-gpu==1.15
1
Edgar Huber

Dieses Problem ist bei Abhängigkeiten zwischen dem Kernel, in dem das Modell trainiert wurde, und den Abhängigkeitsversionen, in denen das Modell geladen wird, üblich.

Wenn Sie jetzt die neueste Version von Tensorflow (2.1) installiert haben, versuchen Sie, das Modell wie folgt zu laden: this :

import tensorflow as tf
print(tf.__version__)
print("Num GPUs Available: ", 
       len(tf.config.experimental.list_physical_devices('GPU')))
# Checking the version for incompatibilities and GPU list devices 
# for a fast check on GPU drivers installation. 

model_filepath = './your_model_path.h5'

model = tf.keras.models.load_model(
    model_filepath,
    custom_objects=None,
    compile=False
)

Compile=False nur wenn das Modell bereits kompiliert wurde.

0
Victor Cid

Ich bin auf dasselbe gestoßen. Sie müssen ein Upgrade auf Tensorlfow 2.0 und Keras durchführen oder die beiden Systeme miteinander kombinieren.

0
MNM

Ich hatte ein ähnliches Problem.

Wenn Sie dieses Problem haben, versuchen Sie, lr anstelle von learning_rate Zu verwenden, wenn Sie die Lernrate in Ihrem Optimierer definieren.

0
okliam

Dies tritt auch auf, wenn ich versuche, mein Modell auf einen anderen Computer zu laden. Trainierte auch das anfängliche Modal auf einer Azure-VM. Ich habe die obigen Vorschläge ausprobiert und kann nicht herausfinden, was sie verursacht. Irgendwelche anderen Gedanken? Unten ist mein Code, um das Modell zu trainieren.

Modelle wurden trainiert und werden in meinen API-Projekten mit den folgenden Versionen verwendet: keras 2.3.0 tensorflow 1.14.0

history = model.fit(X, y,validation_split=0.1, \
                epochs=20, \
                batch_size=1000, \
                class_weight = cw)
0
Tyler Gasperlin