於專案中發生此錯誤時,最主要的幾個檢查點:
- 訓練電腦上的 Keras 版本與執行 load_model 的電腦之 keras 版本是否匹配。
- 檢查訓練電腦上之使用 keras 的方式,是否是 tensorflow 自帶的 keras 還是單純的 keras。
第一種情況,不需要特別解釋,可自行使用 pip 或 conda 去 check 套件版本即可;而第二種情況,需要去 trace code,先看錯誤的 code 在哪行開始 load:
然後,從程式碼來了解 load_model 是從哪個模組引入的:
from keras.models import load_model ... # loading pre trained model model = keras.models.load_model('cnn_model/digit_classifier.h5')
從這裡可以發現,原本 load_model 使用的模組是獨立的 keras。
再回去看訓練機器上的 keras 原來是使用 tensorflow 自帶的:
再回去看訓練機器上的 keras 原來是使用 tensorflow 自帶的:
from tensorflow import keras ... model = keras.Sequential() ... model.fit(.....)
於是修正這個問題,要從 load_model 那一端的電腦把程式碼換成 tensorflow 自帶的 keras 去讀取,就可以解決這個問題。
Reference:
https://github.com/keras-team/keras/issues/3867
https://keras.io/zh/initializers/
https://github.com/tensorflow/tfjs/issues/798
https://stackoverflow.com/questions/53183865/unknown-initializer-glorotuniform-when-loading-keras-model
https://github.com/keras-team/keras/pull/8693
https://stackoverflow.com/questions/48268563/keras-load-model-returning-unexpected-keyword-argument-passed-to-optimizer-amsg
from tensorflow import keras ... # loading pre trained model model = keras.models.load_model('cnn_model/digit_classifier.h5')
Reference:
https://github.com/keras-team/keras/issues/3867
https://keras.io/zh/initializers/
https://github.com/tensorflow/tfjs/issues/798
https://stackoverflow.com/questions/53183865/unknown-initializer-glorotuniform-when-loading-keras-model
https://github.com/keras-team/keras/pull/8693
https://stackoverflow.com/questions/48268563/keras-load-model-returning-unexpected-keyword-argument-passed-to-optimizer-amsg
沒有留言:
張貼留言