加载相同的保存模型后,Keras模型精度会有所不同

问题描述 投票:5回答:2

我训练了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)

甚至,我立刻保存了整个模型(权重和架构),但无法解决这个问题

python-3.x tensorflow model deep-learning keras
2个回答
0
投票

我不确定在Keras API中有多长时间,但我建议使用以下内容:

from keras.models import load_model

model2.save('model2.h5')
del model2
loaded_model2 = load_model('model2.h5')
score = loaded_model2.evaluate(X_test, y_test, verbose=0)
print(score)

您不需要单独保存架构和权重,只是为了重新加载和进行预测。来自Keras文档:https://keras.io/getting-started/faq/#how-can-i-save-a-keras-model


0
投票

不确定,如果你的问题已经解决了,但是对于未来的人来说。我在保存和加载权重时遇到了同样的问题。因此,在加载模型时,精度和损失从68%的准确度大幅变化到2%。在我的实验中,我使用Tensorflow作为后端与Keras模型层嵌入,LSTM和密集。我的问题通过修复使用NumPy随机生成器的keras的种子来解决,因为我使用Tensorflow作为后端,我还为它修复了种子。这些是我在文件顶部添加的行,其中还定义了模型。

from numpy.random import seed seed(42)# keras seed fixing import tensorflow as tf tf.random.set_seed(42)# tensorflow seed fixing

我希望这有帮助。有关更多信息,请查看此-https://machinelearningmastery.com/reproducible-results-neural-networks-keras/

© www.soinside.com 2019 - 2024. All rights reserved.