Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 3.x 加载相同保存的模型后,Keras模型精度不同_Python 3.x_Tensorflow_Model_Deep Learning_Keras - Fatal编程技术网

Python 3.x 加载相同保存的模型后,Keras模型精度不同

Python 3.x 加载相同保存的模型后,Keras模型精度不同,python-3.x,tensorflow,model,deep-learning,keras,Python 3.x,Tensorflow,Model,Deep Learning,Keras,我训练了一个Keras序列模型,然后加载了相同的模型。这两个模型给出了不同的精度。 我遇到了一个类似的问题,但无法解决这个问题 示例代码: 装载和训练模型 model = gensim.models.FastText.load('abc.simple') X,y = load_data() Vectors = np.array(vectors(X)) X_train, X_test, y_train, y_test = train_test_split(Vectors, np.array(y

我训练了一个Keras序列模型,然后加载了相同的模型。这两个模型给出了不同的精度。 我遇到了一个类似的问题,但无法解决这个问题

示例代码: 装载和训练模型

model = gensim.models.FastText.load('abc.simple') 
X,y = load_data()
Vectors = np.array(vectors(X)) 
X_train, X_test, y_train, y_test = train_test_split(Vectors, np.array(y), 
test_size = 0.3, random_state = 0)
X_train = X_train.reshape(X_train.shape[0],100,max_tokens,1) 

X_test = X_test.reshape(X_test.shape[0],100,max_tokens,1)
data for input to our model
print(X_train.shape)
model2 = train()

score = model2.evaluate(X_test, y_test, verbose=0)
print(score)
训练准确率为90%。 保存了模型

# Saving Model
model_json = model2.to_json()
with open("model_architecture.json", "w") as json_file:
  json_file.write(model_json)
model2.save_weights("model_weights.h5")
print("Saved model to disk")
但是,在我重新启动内核并加载保存的模型并在同一组数据上运行它之后,精确度降低了

#load json and create model
json_file = open('model_architecture.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)

#load weights into new model
loaded_model.load_weights("model_weights.h5")
print("Loaded model from disk")

# evaluate loaded model on test data
loaded_model.compile(loss='binary_crossentropy', optimizer='rmsprop', 
metrics=['accuracy'])

score = loaded_model.evaluate(X_test, y_test, verbose=0)
print(score) 
在同一组数据上,准确率降低到75%

如何使其一致

我尝试了以下方法,但没有任何帮助:

from keras.backend import manual_variable_initialization
manual_variable_initialization(True)

甚至,我一次保存了整个模型(权重和体系结构),但无法解决此问题

不确定您的问题是否已解决,但为未来的参与者。 我在保存和加载重量时遇到了完全相同的问题。因此,在加载模型时,精度和损失都发生了很大的变化,从68%的精度变为2%。在我的实验中,我使用Tensorflow作为后端,Keras模型层嵌入、LSTM和Dense。我的问题通过修复keras的种子得到了解决,keras使用NumPy随机生成器,因为我使用Tensorflow作为后端,所以我也修复了keras的种子。 这些是我在文件顶部添加的行,其中也定义了模型

来自numpy.random导入种子种子(42)#keras种子固定导入tensorflow作为tf.random.set#u种子(42)#tensorflow种子固定

我希望这有帮助。
有关更多信息,请查看此-

在重新评估模型之前,当我缩放数据集时,我的代码工作正常。我在保存模型之前做了这个处理,当我打开模型并想再次评估它时,我忘记了重复这个过程。执行此操作后,准确度值显示为它应该显示的值\o/

model_saved = keras.models.load_model('tuned_cnn_1D_HAR_example.h5')

trainX, trainy, testX, testy = load_dataset()
trainX, testX = scale_data(trainX, testX, True) 
score = model_saved.evaluate(testX, testy, verbose=0)
print("%s: %.2f%%" % (model_saved.metrics_names[1], score[1]*100))

在我的函数scale\u数据中,我使用了StandardScaler()

由于我的一个愚蠢错误,我遇到了同样的问题-在加载数据生成器中的模型后,洗牌选项(对培训有用)变为
True
,而不是
False
。将其更改为
False
后,模型将按预期进行预测。如果keras能自动处理这件事就好了。这是我的关键代码部分:

pred_generator = pred_datagen.flow_from_directory(
    directory='./ims_dir',
    target_size=(100, 100),
    color_mode="rgb",
    batch_size=1,
    class_mode="categorical",
    shuffle=False,
)

model = load_model(logpath_ms)

pred=model.predict_generator(pred_generator, steps = N, verbose=1)

这似乎是keras中一个非常有名的bug。请点击查看。我也有这个问题,到目前为止还没有解决办法。