TypeError:传递给优化器的意外关键字参数:learning_rate

时间:2019-09-20 13:05:45

标签: python tensorflow keras deep-learning conv-neural-network

我正在尝试加载在Azure VM(NC促销)上受过训练的Keras模型。但是我遇到了以下错误。

  

TypeError:意外的关键字参数传递给了Optimizer:learning_rate

编辑:

这是我用来加载模型的代码段:

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

13 个答案:

答案 0 :(得分:9)

就我而言,我发现最好的解决方案是使用h5py,如先前文章中所建议的那样,将变量的名称从“ learning_rate”->“ lr”更改。

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()

答案 1 :(得分:7)

这个问题通常是关于训练该模型的内核与加载该模型的依赖版本之间的依赖差异的。

如果您现在已经安装了最新版本的Tensorflow(2.1),请尝试加载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仅在模型已编译时。

答案 2 :(得分:5)

您是否使用了自定义优化器?

如果是这样,则可以这样加载:

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

或者,您可以使用model = load_model('my_model_name.h5', compile=False)加载模型,然后添加优化器并重新编译,但这将失去您保存的权重。

答案 3 :(得分:3)

这也发生在我身上。最有可能是因为learning_rate在2018年9月从版本2.2。*重命名为2.3.0。 (请参见发行说明:https://github.com/keras-team/keras/releases: 将所有优化程序的lr重命名为learning_rate。 )

这对我有用:     sudo pip install keras --upgrade

答案 4 :(得分:3)

我在两台不同的PC上工作时遇到相同的错误。 在某些版本的tensorflow中为tf.keras.optimizers.SGD(lr = x),而在其他版本中为istf.keras.optimizers.SGD(学习率= x)。

答案 5 :(得分:1)

我通过重新安装tensorflow库(具有更新的版本)解决了该问题,并将nvcuda.dll文件放置在system32文件夹下。

答案 6 :(得分:1)

类似于Chayan Bansal,对我而言,解决此问题的方法是更新Tensorflow-GPU库。

如果您使用的是安装了tensorflow-gpu的Anaconda,请打开Anaconda提示符,激活您使用的虚拟环境,然后输入“ conda update tensorflow-gpu”

答案 7 :(得分:0)

当我尝试在另一台机器上加载模型时,我也遇到了这种情况。还训练了蔚蓝VM上的初始模态。我已经尝试了上述建议,但无法弄清楚是什么原因造成的。还有其他想法吗?下面是我训练模型的代码。

模型经过训练,正在使用以下版本在我的api项目中使用: 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)

答案 8 :(得分:0)

我有同样的问题。使用Keras 2.3.1版和TensorFlow-GPU 1.13版时,我不得不将Tensorflow-GPU升级到1.15版

pip uninstall tensorflow-gpu
pip install tensorflow-gpu==1.15

答案 9 :(得分:0)

我遇到了类似的问题。

您遇到此问题,在优化器中定义学习率时,请尝试使用lr而不是learning_rate

答案 10 :(得分:0)

我遇到了同样的事情。您将必须升级到Tensorlfow 2.0和Keras,或将两个系统配合使用。

答案 11 :(得分:0)

如下所述导入

import keras
from keras.models import load_model
from keras.models import Sequential

答案 12 :(得分:0)

对我来说这是一个简单的解决方法。检查您的tensorflow版本。 我在1.14上训练了模型,并在2.0上进行了预测

我再次使用1.14并成功