2016-11-23 140 views
3

我完成模型训练处理。在培训过程中,我用ModelCheckpint通过保存最佳模型的权重:keras:在评估模型中加载保存的模型权重

checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, 
         save_best_only=True, mode='max') 

训练结束后,我加载到评估模型中的模型权重,但我发现该模型并没有给所观察到的最佳精度在训练中。我重装型号如下:

model.load_weights(filepath) #load saved weights 
model = Sequential() 
model.add(Convolution2D(32, 7, 7, input_shape=(3, 128, 128))) 
.... 
.... 
model.compile(loss='categorical_crossentropy', 
      optimizer=sgd, 
      metrics=['accuracy']) 

#evaluate the model 
scores = model.evaluate_generator(test_generator,val_samples) 
print("Accuracy = ", scores[1]) 

通过Modelcheckpoint保存精度最高为85%左右,但是重新编译模型只给出了16%的准确度?

我在做什么错?

为了安全起见,有什么方法可以直接保存最佳模型而不是模型重量吗?

回答

0

编译模型后放置model.load_weights(filepath)可修复问题!

但是,我还是很好奇训练中保存最好的模式

+0

你说在培训期间保存最好的模型是什么意思?模型在训练时不会改变|:以任何方式如果你想这样做...你可以使用标志save_weights_only = False,它会在每个时代保存模型....你提醒我关于我问的一个问题: https://stackoverflow.com/questions/48139494/tensorflow-keras-modelcheckpoint-saving-model-while-training-why –

0

两个提示可确保您使用训练的最佳模式:

的val_acc添加到文件名

你可以创建ModelCheckpoint这样的:

checkpoint = ModelCheckpoint('my-model-{val_acc:.2f}.hdf5', monitor='val_acc', verbose=1, 
        save_best_only=True, mode='max') 

这样的话,你将有多个文件,你就可以确保你p ick最好的模型。

阅读训练输出

当你看Keras而配件的输出,你会看到:

Epoch 000XX: val_acc improved from 0.8 to 0.85, saving model to my-model-0.85.hdf5 
0

比方说,你有一组数据,你在训练上你决定只保存最佳迭代的权重。现在,如果您在查找“最佳”模型权重之前没有遍历所有数据,那么您将有效地丢弃数据,而后来使用所谓的最佳权重进行的评估将与您的批量评估无关。