我從.json和.hdf5文件加載Keras
模型。當我打電話model.evaluate()
,它返回一個錯誤:需要在`model.evaluate()`之前編譯keras模型`
You must compile a model before training/testing. Use `model.compile(optimizer, loss)
爲什麼我需要編譯運行evaluate()
?
要添加,該模型可以通過predict()
沒有問題。
我從.json和.hdf5文件加載Keras
模型。當我打電話model.evaluate()
,它返回一個錯誤:需要在`model.evaluate()`之前編譯keras模型`
You must compile a model before training/testing. Use `model.compile(optimizer, loss)
爲什麼我需要編譯運行evaluate()
?
要添加,該模型可以通過predict()
沒有問題。
因爲evaluate
會計算損失函數和度量。
在編譯模型之前,您沒有其中任何一個。他們參數編譯方法:
model.compile(optimizer=..., loss=..., metrics=...)
在另一方面,predict
不評價任何指標或損失,它只是通過模型通過對輸入數據,並得到其輸出。
您也需要「損失」進行培訓,因此您無法編譯而無法進行培訓。您可以根據需要多次編譯模型,甚至可以更改參數。
的輸出和損耗函數:
該模型的輸出依賴於它正在與重量定義。這是自動的,你可以從任何型號的predict
,即使沒有任何培訓。 Keras中的每個模型都已經生成了重量(由您初始化或隨機初始化)
您輸入了一些內容,模型會計算輸出。在所有事情的最後,這都是重要的。一個好的模型具有適當的權重並正確地輸出東西。
但在實現這一目標之前,您的模型需要接受培訓。
現在,損失函數將獲取當前輸出並將其與期望/真實結果進行比較。這是一個應該儘量減少的功能。損失越少,結果越接近預期。這是導出衍生物的函數,所以反向傳播算法可以更新權重。
損失函數對模型的最終目的沒有用處,但對於培訓是必需的。這可能就是爲什麼你可以擁有沒有損失函數的模型(因此,沒有辦法評估它們)。
你介意解釋爲什麼在https://github.com/JihongJu/keras-fcn/blob/master/voc2011/infer.py,沒有必要編譯調用model.evaluate? load_model(fcn_vgg16_weights.h5)以某種方式包含了丟失函數? – bhomass
不幸的是,我從未能夠在Keras中保存和加載模型,我不知道會發生什麼。對我來說,這完全是越野車,我只能保存重量。但理論上,是的,可以通過其損失函數和優化程序狀態來保存模型。但這並不意味着每個保存的模型都會像這樣保存。 –
@bhomass是的,'load_model()'函數實際上有一個'模型。編譯()'裏面的調用。只要模型在保存之前編譯完成,它將在加載時自動重新編譯。 –
你用'load_weights()'加載模型嗎? __HDF5__格式用於嚴格保存權重。你能否提供代碼?謝謝。 –
您使用的是Keras版本? –