web-dev-qa-db-fra.com

TypeError: argument de mot clé inattendu transmis à l'optimiseur: learning_rate

J'essaie de charger un modèle Keras qui a été formé sur un Azure VM (promo NC). Mais j'obtiens l'erreur suivante.

TypeError: argument de mot clé inattendu transmis à l'optimiseur: learning_rate

ÉDITER:

Voici l'extrait de code que j'utilise pour charger mon modèle:

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

Je l'ai résolu en réinstallant la bibliothèque tensorflow (avec une version mise à jour) et j'ai également placé le fichier nvcuda.dll dans le dossier system32.

0
Chayan Bansal

Avez-vous utilisé un optimiseur personnalisé?

Si oui, vous pouvez charger comme ceci:

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

Alternativement, vous pouvez charger votre modèle avec model = load_model('my_model_name.h5', compile=False) puis ajouter un optimiseur et recompiler, mais cela perdra vos poids enregistrés.

7
Rob Bricheno

j'ai eu la même erreur pendant que je travaillais sur deux PC différents. dans certaines versions de tensorflow est tf.keras.optimizers.SGD (lr = x) tandis que dans d'autres versions istf.keras.optimizers.SGD (learning rate = x).

7
Walter Jacquet

Cela m'est arrivé aussi. Très probablement parce que le learning_rate a été renommé de la version 2.2. * à 2.3.0 en septembre 2018. (voir les notes de publication: https://github.com/keras-team/keras/releases : renommer lr en learning_rate pour tous les optimiseurs.)

Cela a fonctionné pour moi: Sudo pip install keras --upgrade

6
MichaelF

Dans mon cas, j'ai trouvé que la meilleure solution était d'utiliser h5py pour changer le nom de la variable de "learning_rate" -> "lr" comme suggéré dans les articles précédents.

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

J'ai eu le même problème. En utilisant Keras version 2.3.1 et TensorFlow-GPU version 1.13, j'ai dû mettre à niveau Tensorflow-GPU vers la version 1.15

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

Ce problème habituel sur la différence de dépendances entre le noyau où ce modèle a été formé et les versions de dépendances où le modèle est chargé.

Si vous avez installé la dernière version de Tensorflow maintenant (2.1) essayez de charger le modèle comme 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 uniquement si le modèle a déjà été compilé.

0
Victor Cid

Je rencontrais la même chose. Vous devrez mettre à niveau vers Tensorflow 2.0 et Keras, ou faire correspondre les deux systèmes ensemble.

0
MNM

J'ai eu un problème similaire.

Si vous avez ce problème, essayez d'utiliser lr au lieu de learning_rate lors de la définition du taux d'apprentissage dans votre optimiseur.

0
okliam

Je ressens également cela lorsque j'essaie de charger mon modèle sur une autre machine. A également formé le modal initial sur une machine virtuelle Azure. J'ai essayé les suggestions ci-dessus et je n'arrive pas à comprendre ce qui en est la cause. D'autres réflexions? Ci-dessous est mon code pour former le modèle.

Les modèles ont été formés et sont utilisés dans mes projets d'api en utilisant les versions suivantes: 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