【发布时间】:2018-08-05 08:58:00
【问题描述】:
我训练了一个 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 中一个非常知名的 bug。查看github.com/keras-team/keras/issues/4875。我也有这个问题,目前还没有解决办法。
标签: python-3.x tensorflow model deep-learning keras