我已经训练了一个模型并保存在一个特定的目录中,而在训练时它提供了大约81%的测试精度。我使用了以下命令:
model = Sequential()
model.add(Embedding(max_features, 128, input_length=max_len))
model.add(SpatialDropout1D(0.3))
model.add(GaussianNoise(0.2))
model.add(LSTM(128 , dropout_W=0.3, dropout_U=0.3, return_sequences=False))
model.add(LSTM(56, dropout_W = 0.4, dropout_U=0.4))
model.add(Dense(1, W_regularizer=l2(0.2)))
model.add(Activation('sigmoid'))
model.summary()
adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.00)
model.compile(loss='binary_crossentropy', optimizer=adam,metrics = ['accuracy'] )
model_history = model.fit(x, y=y, batch_size=128, epochs=2, verbose=1,validation_split = 0.2)
model_json = model.to_json()
with open("C:/Users/twelve_user/Downloads/model3.json", "w") as json_file:
json_file.write(model_json)
model.save_weights("C:/Users/twelve_user/Downloads/weights_model3.h5")
print("Saved model to disk")
predictions = model.predict(testx)
但每当我试图在不同的python脚本中加载相同的模型时,准确率下降,即76%。有时我会像未经训练的模型一样获得随机准确性。下面给出了我用于加载的命令:
json_file = open('C:/Users/twelve_user/Downloads/model3.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
model = model_from_json(loaded_model_json)
model.load_weights("C:/Users/twelve_user/Downloads/weights_mode3.h5")
print("Loaded model from disk")
这怎么可能?训练和加载模型的结果都应该相同。因为我对Keras很新,不能理解我错在哪里 感谢您的帮助!任何帮助将不胜感激。
答案 0 :(得分:0)
这是因为权重是使用随机值初始化的,请查找代码段和详细信息here
答案 1 :(得分:-1)
这很可能是因为您只保存模型结构和模型权重。您不保存优化程序或培训配置的状态。如果您想要完全相同的模型,请使用keras函数model.save
。
另请查看this faq以获取更多信息。
示例代码
predictions_before = model.predict(testx)
model.save('model3.h5')
del model
model = load_model('model3.h5')
predictions_after = model.predict(testx)