Python Keras VGG16-模型保存和加载,给出不同的结果
我试图加载一个保存的模型,以便在重启内核后使用它进行预测。虽然保存模型似乎是可行的,但加载似乎不是没有问题的。以下是我所做的: 我使用Keras对VGG16模型进行了再培训:Python Keras VGG16-模型保存和加载,给出不同的结果,python,tensorflow,keras,Python,Tensorflow,Keras,我试图加载一个保存的模型,以便在重启内核后使用它进行预测。虽然保存模型似乎是可行的,但加载似乎不是没有问题的。以下是我所做的: 我使用Keras对VGG16模型进行了再培训: vgg16_model = keras.applications.vgg16.VGG16() model = Sequential() for layer in vgg16_model.layers[:-1]: model.add(layer) model.layers.pop() for layer in m
vgg16_model = keras.applications.vgg16.VGG16()
model = Sequential()
for layer in vgg16_model.layers[:-1]:
model.add(layer)
model.layers.pop()
for layer in model.layers:
layer.trainable = False
model.add(Dense(26, activation='softmax'))
model.summary()
model.compile(Adam(lr=.0000025), loss='categorical_crossentropy', metrics=['accuracy'])
接下来,我对模型进行了培训:
model.fit_generator(train_batches,validation_data=validation_batches,
epochs=85, verbose=1,callbacks=[tbCallBack,earlystopCallback])
最后,我保存了我的模型,如下所示:
model.save("model.h5")
现在,当我重新启动内核并使用以下命令再次加载模型时:
from keras.models import load_model
new_model = load_model("model.h5")
当模型加载时,我收到一条警告,告诉我:
C:\Users…\Anaconda2\envs\tensorflow gpu\lib\site packages\keras\models.py:291:
UserWarning:加载保存的优化器状态时出错。因此,
您的模型从新初始化的优化器开始。warnings.warn('加载保存的优化器时出错' 此外,当我使用加载的模型进行预测时,我得到了错误的值(与我训练的值非常不同),并且该模型似乎根本没有经过训练。但是,当我检查.get_权重时,我看到权重已经加载 我还尝试通过json和权重保存和加载模型,如下所示:
# serialize model to JSON
model_json = model.to_json()
with open("model.json", "w") as json_file:
json_file.write(model_json)
# serialize weights to HDF5
model.save_weights("model_weights.h5")
和装载:
#load json and create model
json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
load_model = model_from_json(loaded_model_json)
# load weights into new model
load_model.load_weights("model_weights.h5")
虽然以这种方式加载模型不会向我抛出错误消息,但我得到的预测仍然比我以前训练的模型差得多。为了确保模型加载工作正常,我执行了以下操作:
- 我检查了训练模型和加载模型的权重,它们看起来是一样的
- 同时检查模型摘要“model.summary()”也会显示相同的体系结构
#getting weights from the old model
weights = model.get_weights()
# setting weights of the new model
new_model.set_weights(weights)
您提到您的预测不好。这可能不是最好的衡量标准。此外,在保存模型之前,您是否获得了良好的预测也不清楚。您是否比较了之前和之后的权重?@de1与不好的预测相比,我的意思是,模型的预测性能要比经过训练的模型I差得多这是一个非常严重的性能下降,我认为这个模型是不训练的。当我继续训练的时候,我发现模型的损失比以前要高很多。正如你建议的,我检查了模型的权重,我看到保存和加载的模型看起来有相同的权重。(更新了我的帖子)。因此,我假设错误与我构建/重新训练模型的方式有关,但我不确定该去哪里查找