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

问题描述 投票:0回答:13

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

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

编辑:

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

from keras.models import load_model
model = load_model('my_model_name.h5')
python tensorflow keras deep-learning conv-neural-network
13个回答
20
投票

这也发生在我身上。很可能是因为

learning_rate
在 2018 年 9 月从版本 2.2.* 重命名为 2.3.0。 (请参阅发行说明:https://github.com/keras-team/keras/releases: 对于所有优化器,将 lr 重命名为learning_rate。 )

这对我有用:

pip install keras --upgrade 

15
投票

您使用了自定义优化器吗?

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

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)
加载模型,然后添加优化器并重新编译,但这会丢失您保存的权重。


13
投票

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

8
投票

该问题通常与训练模型的内核和加载模型的依赖项版本之间的依赖项差异有关。

如果您现在已经安装了最新版本的 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
仅当模型已编译时。


7
投票

当我在两台不同的电脑上工作时,我遇到了同样的错误。 在某些版本的tensorflow中是tf.keras.optimizers.SGD(lr = x),而在其他版本中是tf.keras.optimizers.SGD(学习率= x)。


2
投票

我也有同样的问题。使用 Keras 版本 2.3.1 和 TensorFlow-GPU 版本 1.13,我必须将 Tensorflow-GPU 升级到版本 1.15

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

1
投票

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


1
投票

与 Chayan Bansal 类似,为我解决这个问题的是更新我的 Tensorflow-GPU 库。

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


0
投票

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

模型经过训练并正在我的 api 项目中使用,使用以下版本: 喀拉斯2.3.0 张量流1.14.0

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

0
投票

我也遇到过类似的问题。

如果您遇到此问题,请在优化器中定义学习率时尝试使用

lr
而不是
learning_rate


0
投票

我也遇到了同样的事情。您必须升级到 Tensorlfow 2.0 和 Keras,或者将这两个系统匹配在一起。


0
投票

这对我来说是一个简单的修复。检查您的张量流版本。 我在 1.14 上训练模型并在 2.0 上预测它

我又用了1.14,成功了


0
投票

按如下所述导入,

import keras
from keras.models import load_model
from keras.models import Sequential
© www.soinside.com 2019 - 2024. All rights reserved.