Python 3.x 加载相同保存的模型后,Keras模型精度不同
我训练了一个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
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。请点击查看。我也有这个问题,到目前为止还没有解决办法。