类型错误:传递给优化器的意外关键字参数:learning_rate

Cha*_*sal 16 python deep-learning conv-neural-network keras tensorflow

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

类型错误:意外的关键字参数传递给优化器:learning_rate

编辑:

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

from keras.models import load_model
model = load_model('my_model_name.h5')
Run Code Online (Sandbox Code Playgroud)

小智 19

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

这对我有用:

sudo pip install keras --upgrade 
Run Code Online (Sandbox Code Playgroud)


Rob*_*eno 14

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

如果是这样,您可以像这样加载:

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

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

  • 我在加载 keras 模型时遇到了同样的问题,并且更改 keras 版本和依赖项不起作用。最后,你的解决方案只是设置compile=False有效,我没有失去任何重量 (3认同)
  • 感谢你的回答。但我通过重新安装tensorflow库(使用更新版本)解决了这个问题,并将nvcuda.dll文件放在system32文件夹下。谢谢! (2认同)
  • @Rob model = load_model('my_model_name.h5',compile=False) 也帮助了我! (2认同)

小智 12

就我而言,我发现最好的解决方案是使用 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()
Run Code Online (Sandbox Code Playgroud)

  • 如果您在以前版本的 Keras 中保存了模型但想要在新版本中加载它,这是唯一可行的解​​决方案。顺便说一下,要打开保存的模型,请使用 `f = h5py.File(path_to_you_model,'r+')` (3认同)

Vic*_*Cid 8

该问题通常出现在训练该模型的内核与加载模型的依赖项版本之间的依赖项差异上。

如果您现在安装了最新版本的 Tensorflow (2.1),请尝试像这样加载模型:

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
)
Run Code Online (Sandbox Code Playgroud)

Compile=False 仅当模型已经编译时。


小智 7

我在两台不同的 PC 上工作时遇到了同样的错误。在 tensorflow 的某些版本中是 tf.keras.optimizers.SGD(lr = x) 而在其他版本中是 istf.keras.optimizers.SGD(learning rate = x)。


Cha*_*sal 1

我通过重新安装tensorflow库(使用更新版本)解决了这个问题,并将nvcuda.dll文件放在system32文件夹下。