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')
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.
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.
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).
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
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()
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
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é.
Je rencontrais la même chose. Vous devrez mettre à niveau vers Tensorflow 2.0 et Keras, ou faire correspondre les deux systèmes ensemble.
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.
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)