python - ValueError : You called `set_weights(weights)` on optimizer RMSprop with a weight list of length 3, 但优化器期望权重为 0

标签 python tensorflow keras tensorflow2.0 tf.keras

我有一个以“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初始化模型。

最佳答案

我自己刚遇到这个。根据 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)

关于python - ValueError : You called `set_weights(weights)` on optimizer RMSprop with a weight list of length 3, 但优化器期望权重为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64183141/

相关文章:

python - Keras 自定义损失函数,具有来自拟合生成器的多个参数

python - 使用 Python 从 Google Cloud Storage 下载大文件

javascript - 服务器上已登录用户与未登录用户的不同页面与 JavaScript

python - 在 python 上循环

python - 如何在 TensorFlow import_graph_def 期间更改输入维度

tensorflow - 如何卸载 NVIDIA 内核模块 'nvidia' 以安装新驱动程序?

python - 验证码识别与卷积网络,如何定义损失函数

keras - 从预训练的 keras 模型中移除层提供与原始模型相同的输出

tensorflow - 我可以编写一个 keras 回调来记录并返回总训练时间吗?

python - 暂停后重新启动时间