ValueError:您在优化器 RMSprop 上调用了“set_weights(weights)”,权重列表长度为 3,但优化器期望权重为 0

Posted

技术标签:

【中文标题】ValueError:您在优化器 RMSprop 上调用了“set_weights(weights)”,权重列表长度为 3,但优化器期望权重为 0【英文标题】:ValueError: You called `set_weights(weights)` on optimizer RMSprop with a weight list of length 3, but the optimizer was expecting 0 weights 【发布时间】:2021-01-18 19:33:47 【问题描述】:

我有一个以“h5”格式保存的模型。在使用

编译模型后,我正在尝试恢复训练并尝试加载优化器的权重

model.optimizer.set_weights(weights_list)

weights_list 是一个 numpy 数组列表,其中包含我从 h5 文件中手动提取的优化器权重。

但我收到上述错误。

当我尝试model.optimizer.get_weights() 时,我得到一个空列表。

我想知道如何在没有任何错误的情况下初始化优化器权重。

但是,如果我这样做了

model = tf.keras.model.load_model('~/modelname.h5',custom_objects=,compile=True)

有效,也就是说我可以使用之前保存的权重继续训练。

但是,tf.keras.models.load_model 并不总是有效,有时它需要一个人来构建模型并使用load_weights 来初始化模型。

【问题讨论】:

【参考方案1】:

我自己也遇到了。按照this question 运行model._make_train_function() 为我解决了这个问题。

x = Input((50,))
out = Dense(1, activation='sigmoid')(x)
model = Model(x, out)
model.compile(optimizer='adam', loss='binary_crossentropy')

model.load_weights('weights.h5')
model._make_train_function()
with open('optimizer.pkl', 'rb') as f:
    weight_values = pickle.load(f)
model.optimizer.set_weights(weight_values)

【讨论】:

嗨,我也在尝试这些代码行,但我得到了这个错误:AttributeError: 'Model' object has no attribute '_make_train_function',为什么会这样?

以上是关于ValueError:您在优化器 RMSprop 上调用了“set_weights(weights)”,权重列表长度为 3,但优化器期望权重为 0的主要内容,如果未能解决你的问题,请参考以下文章

Pytorch Note18 优化算法4 RMSprop算法

神经网络优化算法 (BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)

ValueError:未知优化器:优化器

Pytorch优化器全总结AdadeltaRMSpropAdamAdamaxAdamWNAdamSparseAdam(重置版)

Anaconda:ValueError:无法解释优化器标识符

Pytorch ValueError:优化器得到一个空的参数列表