【发布时间】:2018-06-30 10:46:25
【问题描述】:
我正在通过keras 和tensorflow 后端训练一些模型。
当我在对同一对象进行训练后立即调用 predict 时,它可以正常工作并为不同的输入提供不同的值。但是当我将模型保存到文件中,然后从另一个 python 会话中加载它时,predict 总是为不同的输入返回相同的值。
我使用ModelCheckpoint 保存模型,然后使用load_model 进行加载。我还尝试使用 to_json 和 model_from_json 函数将架构分别保存和加载到 json 文件中。示例代码:
保存部分
with open("model.json", "w") as textFile:
print(model.to_json(), file = textFile)
model.fit(X_train, y_train, epochs=iterationCount, batch_size=64, validation_split=0.2, callbacks = [ModelCheckpoint(filepath='model.h5', verbose=0, save_best_only=True)])
加载部分
with open('model.json') as json_file:
model = model_from_json(json_file.read())
model.load_weights('model.h5')
有什么想法可以解决这个问题吗?我有什么遗漏的吗?
【问题讨论】:
-
能否禁用
save_best_only选项并检查是否有任何变化。 -
数据预处理怎么样?是一样的吗?如果数据未按比例缩放,您通常会为所有示例获得相同的预测。
-
@MarcinMożejko 是的,我使用 scikit learn 的
StandardScaler()进行预处理。我使用joblib.dump()和joblib.load()函数将缩放器保存并加载到文件中。 -
这有什么更新吗?我也遇到了同样的问题,不知道怎么解决。
-
@MarcinMożejko 是对的,数据预处理代码中存在错误。我的数据中有非常大的数字,并且由于该错误,它们没有被清除/缩放,这导致了问题中描述的行为。
标签: python tensorflow keras