我训练了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)
甚至,我立刻保存了整个模型(权重和架构),但无法解决这个问题
我不确定在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
不确定,如果你的问题已经解决了,但是对于未来的人来说。我在保存和加载权重时遇到了同样的问题。因此,在加载模型时,精度和损失从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/