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

Posted

技术标签:

【中文标题】TypeError:传递给优化器的意外关键字参数:learning_rate【英文标题】:TypeError: Unexpected keyword argument passed to optimizer: learning_rate 【发布时间】:2020-01-21 13:09:45 【问题描述】:

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

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

编辑:

这是我用来加载模型的代码 sn-p:

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

【问题讨论】:

请问您能出示您的代码吗? @RobBricheno 你想知道整个模型架构吗? 这似乎是版本问题....我现在不知道如何处理h5文件,但它们基本上包含一些键和信息。您可能需要打开此文件并将learning_rate 替换为lr @DanielMöller 如何打开 h5 文件? 【参考方案1】:

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

这对我有用:

sudo pip install keras --upgrade 

【讨论】:

【参考方案2】:

如下所述导入,

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

【讨论】:

你提到的台词在哪里?【参考方案3】:

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

我再次使用了 1.14 并且成功了

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

如果您现在已经安装了最新版本的 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】:

在我的情况下,我发现最好的解决方案是使用 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()

【讨论】:

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

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

【讨论】:

【参考方案9】:

我也遇到过类似的问题。

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

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

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

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

【讨论】:

【参考方案12】:

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

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

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

【讨论】:

嗨,泰勒,欢迎来到 Stack Overflow。如果您有任何问题,请点击页面右上角的“”按钮发布问题。【参考方案13】:

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

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

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

【讨论】:

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

以上是关于TypeError:传递给优化器的意外关键字参数:learning_rate的主要内容,如果未能解决你的问题,请参考以下文章

Subparsers.add_parser TypeError: __init__() 得到了一个意外的关键字参数“prog”

如何忽略传递给函数的意外关键字参数?

TypeError: line() 得到了一个意外的关键字参数“标记”

TypeError:attrib() 得到了一个意外的关键字参数“convert”

TypeError: __init__() 得到了一个意外的关键字参数“评分”

TypeError: plot_confusion_matrix() 得到了一个意外的关键字参数“标题”