Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 凯拉斯>;加载保存的模型后始终保持相同的预测值_Python_Tensorflow_Keras - Fatal编程技术网

Python 凯拉斯>;加载保存的模型后始终保持相同的预测值

Python 凯拉斯>;加载保存的模型后始终保持相同的预测值,python,tensorflow,keras,Python,Tensorflow,Keras,我正在通过keras和tensorflow后端培训一些模型 当我在同一个对象上进行训练后立即调用predict时,它工作良好,并为不同的输入提供不同的值。但是当我将模型保存到文件中,然后从另一个python会话加载它时,predict总是为不同的输入返回相同的值 我使用ModelCheckpoint保存模型,然后使用load\u model加载模型。我还尝试使用to_json和model_from_json函数将架构分别保存和加载到json文件中。示例代码: 保存部分 with open("mo

我正在通过
keras
tensorflow
后端培训一些模型

当我在同一个对象上进行训练后立即调用predict时,它工作良好,并为不同的输入提供不同的值。但是当我将模型保存到文件中,然后从另一个
python
会话加载它时,
predict
总是为不同的输入返回相同的值

我使用
ModelCheckpoint
保存模型,然后使用
load\u 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')
有什么办法解决这个问题吗?有什么我遗漏的吗?

不幸的是,许多人(像我一样)一直在抱怨影响
保存权重
加载权重
功能的问题

我最终避免使用这些函数。如果我想加载/存储我的模型,我只需执行以下操作:

from keras.models import load_model

trained_model.save(file_path)
loaded_model = load_model(file_path)
from keras.models import load_model
trained_model.save(file_path)
loaded_model = load_model(file_path)

trained_model.save_weights(file_path)
# We have to define model first before loading weights
trained_model.load_weights(file_path)

save
功能可以保存您的权重,还可以保存您的网络结构和优化器的状态(它确保您可以将培训模型保持在暂停的位置)。

keras模型保存/加载有两种方法(我觉得使用这两种方法比较方便)。保存模型结构和权重
model.save(文件路径)
并仅保存模型权重
model.save_权重(文件路径)
。 因此,我保存/加载模型如下:

from keras.models import load_model

trained_model.save(file_path)
loaded_model = load_model(file_path)
from keras.models import load_model
trained_model.save(file_path)
loaded_model = load_model(file_path)

trained_model.save_weights(file_path)
# We have to define model first before loading weights
trained_model.load_weights(file_path)

在这里,
load\u weights(file\u path,by\u name=True)
允许您将权重加载到不同的结构中,其中有一些层名称是相同的。

我也遇到了同样的问题,我通过将固定种子设置为tensorflow、numpy和python来解决

import tensorflow as tf
import numpy as np
import random as python_random
tf.random.set_random_seed(42)
np.random.seed(42)
python_random.seed(42)

小心!不同版本的tensorflow可能需要不同的方法来设定种子

您能否禁用
save\u best\u only
选项并检查是否有任何更改。数据预处理如何?是一样的吗?如果数据没有进行缩放,那么对于所有示例,通常都会得到相同的预测。@MarcinMożejko是的,对于预处理,我使用scikit learn的
StandardScaler()
。我使用
joblib.dump()
joblib.load()
函数将定标器保存并加载到一个文件中。对此有任何更新吗?我遇到了同样的问题,我不知道如何解决它。@MarcinMożejko是对的,数据预处理代码中有一个bug。我的数据中有非常大的数字,由于这个错误,它们没有被清除/缩放,这导致了问题中描述的行为。我尝试使用您提到的方法,但它再次给出了相同的结果。