Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras VGG16-模型保存和加载,给出不同的结果_Python_Tensorflow_Keras - Fatal编程技术网

Python 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

我试图加载一个保存的模型,以便在重启内核后使用它进行预测。虽然保存模型似乎是可行的,但加载似乎不是没有问题的。以下是我所做的:

我使用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 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()”也会显示相同的体系结构

因此,据我所知,拥有相同的体系结构和相同的权重应该产生相同的模型,即结果——但我不明白为什么不是这样

更让我困惑的是,当我使用model.get_weights()和model.set_weights()时,它工作得非常好,例如:

#getting weights from the old model
weights = model.get_weights()

# setting weights of the new model
new_model.set_weights(weights)

您提到您的预测不好。这可能不是最好的衡量标准。此外,在保存模型之前,您是否获得了良好的预测也不清楚。您是否比较了之前和之后的权重?@de1与不好的预测相比,我的意思是,模型的预测性能要比经过训练的模型I差得多这是一个非常严重的性能下降,我认为这个模型是不训练的。当我继续训练的时候,我发现模型的损失比以前要高很多。正如你建议的,我检查了模型的权重,我看到保存和加载的模型看起来有相同的权重。(更新了我的帖子)。因此,我假设错误与我构建/重新训练模型的方式有关,但我不确定该去哪里查找