完美解決keras儲存好的model不能成功載入問題
前兩天呼叫之前用keras(tensorflow做後端)訓練好model,卻意外發現報錯了!!之前從來沒有過報錯!!錯誤內容貼上如下:
File “h5py_objects.pyx”,line 54,in h5py._objects.with_phil.wrapper (C:\Minonda\conda-bld\h5py_1496885653697\work\h5py_objects.c:2867)
File “h5py_objects.pyx”,line 55,in h5py._objects.with_phil.wrapper (C:\Minonda\conda-bld\h5py_1496885653697\work\h5py_objects.c:2825)
File “h5py\h5f.pyx”,line 78,in h5py.h5f.open (C:\Minonda\conda-bld\h5py_1496885653697\work\h5py\h5f.c:2140)
OSError: Unable to open file (File signature not found)
意思好像就是檔案結構找不到了,然後我百度了,他說是訓練好的檔案資料丟失了,重新訓練就好了。
但是,我重新訓練了好幾次,確保訓練的model檔案沒有錯誤,在呼叫時依然報了同樣的錯誤。
一氣之下,我解除安裝了h5py,然後重新安裝h5py的最新版本,問題竟然神奇的解決了,哈哈哈哈!幸運!
補充知識:Keras使用 Lambda後訓練出的模型載入後,預測結果為隨機
問題
Keras 使用 Lambda後訓練出的模型載入後,預測結果為隨機accuracy
解決方案
原因出在,我構建模型的時候需要用到TensorFlow的一些函式,所以用了Lambda,有把一些需要訓練weights的層也寫到了裡面。
重點就在這,模型權重儲存的時候,沒儲存Lambda裡面的。
用notepad開啟權重檔案,發現裡面儲存的Tensor不包含這些,所以每一次重新載入模型測試的時候都會重新初始化一些層的權重,導致結果是隨機的。
結論
不要在Lambda層裡面加入任何需要訓練權重的層
模型儲存出錯的時候,看一下模型檔案裡面儲存的Tensor是否一致
以上這篇完美解決keras儲存好的model不能成功載入問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。