2016-11-23 171 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

比方說,你有一組數據,你在訓練上你決定只保存最佳迭代的權重。現在,如果您在查找「最佳」模型權重之前沒有遍歷所有數據,那麼您將有效地丟棄數據,而後來使用所謂的最佳權重進行的評估將與您的批量評估無關。