【发布时间】:2018-08-28 16:40:14
【问题描述】:
我使用 model.save 保存了一个 RNN (GRU) 模型,但是当我在加载模型后运行拟合函数时,它会弄乱我的权重并给出错误的预测。但是,当我在不运行 fit 函数的情况下进行预测时,我得到了正确的预测。
opt = Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, decay=0.01)
rnn_model.compile(loss='binary_crossentropy', optimizer=opt, metrics=["accuracy"])
rnn_model.save('./models/my_model.h5')
#This predicts correctly
model = load_model('my_model.h5')
model.predict(x)
#This does NOT predict correctly
model=load_model('my_model.h5')
model.fit(X, Y, batch_size = 5, epochs=1)
model.predict(x)
更新(找到解决方法): 我还没有弄清楚问题的根源。但似乎我正在加载的模型保存在 Keras 2.0.6 上,我正在将它加载到 Keras 2.1.5 上。带有“save_weights”和“load_weights”功能的东西不起作用,所以我不得不在我手动从头开始构建的架构上逐层加载权重(使用 json 从保存的模型加载架构也可以):
for layer_loaded, layer_built in zip(loaded_model,built_model):
layer_built.set_weights(layer_loaded.get_weights())
【问题讨论】:
-
加载模型后尝试再次运行model.compile
-
@MohamedElzarei 我试图避免这种情况,因为我不想更改优化器参数,例如学习率(由于衰减而与初始学习率不同)。
-
@MohamedElzarei 抱歉,我不明白——哪些解决方案适用于我的?
-
@MohamedElzarei 我尝试了使用回调的解决方案,但效果不佳。我很困惑。
标签: python tensorflow keras recurrent-neural-network rnn