Google ColabでCNN(VGG)をトレーニングし、.h5ファイルを生成しました。問題は、Google colabを使用して出力を正常に予測できることですが、その.h5トレーニング済みモデルファイルをダウンロードしてラップトップで出力を予測しようとすると、モデルのロード時にエラーが発生します。
コードは次のとおりです。
import tensorflow as tf
from tensorflow import keras
import h5py
# Initialization
loaded_model = keras.models.load_model('./train_personCount_model.h5')
そしてエラー:
ValueError: Unknown initializer: GlorotUniform
私は同じ問題に遭遇しました。変更後:
from tensorflow import keras
に:
import keras
人生は再び生きる価値があります。
うわー、私はこれを理解するために私の人生の6時間を費やしました.. Dmitriはこれに対する解決策をここに投稿しました: Google colabでkerasモデルを訓練しました。システム上でローカルにロードできなくなりました。
それは私のために働いたので、私は基本的にここにそれを再投稿しています。
これは、kerasの何らかのシリアル化バグのように見えます。 load_modelを以下のCustomObjectScopeでラップすると、すべてが機能するはずです。
import keras
from keras.models import load_model
from keras.utils import CustomObjectScope
from keras.initializers import glorot_uniform
with CustomObjectScope({'GlorotUniform': glorot_uniform()}):
model = load_model('imdb_mlp_model.h5')
私は問題を修正しました:
前:
from keras.models import load_model classifierLoad = load_model('model/modeltest.h5')
私のために働く
import tensorflow as tf classifierLoad = tf.keras.models.load_model('model/modeltest.h5')
変更
from keras.models import load_model
to
from tensorflow.keras.models import load_model
私の問題を解決しました!
エラーを排除するには、KerasまたはTensorFlowから直接allをインポートします。同じプロジェクトで両方を混在させると、問題が発生する可能性があります。
私は同じ問題を抱えており、このように修正されました。オプティマイザーをモデルと一緒に保存しないでください!次のように保存行を変更するだけです。
the_model.save(file_path,True/False,False)
2番目のパラメーターは、ファイルが存在するかどうかにかかわらずモデルを上書きするようにKerasに指示し、3番目のパラメーターはオプティマイザーをモデルとともに保存しないように指示します。
編集:今日、別のシステムで問題を再度実行しましたが、今回はこれが役に立ちませんでした。そのため、モデルconfをjsonとして、重みをh5として保存し、それらを使用して別のマシンでモデルを再構築しました。このようにすることができます。このように保存します:
json = model.to_json()
# Save the json on a file
model.save_weights(weights_filepath,save_format="h5")
次のようにモデルを再構築します。
# load the json file
# here i use json as loaded content of json file
model = keras.models.model_from_json(json)
model.load_weights(weights_file_path)
何か それは私を助けたが、どの答えにもなかった:
custom_objects={'GlorotUniform': glorot_uniform()}
モデルのアーキテクチャをロードしながら、アーキテクチャとウェイトを個別にロードする場合:
models.model_from_json(json)
に:
tf.keras.models.model_from_json(json)
そして問題は解決されました
Tensorflow 11.1.0(tensorflow.python.keras.models.save_modelを使用)で構築され、tensoflow 1.11.0(tensorflow.python.keras.models.load_modelを使用)でロードされたモデルでも同じ問題が発生しました。
すべてをtensorflow 1.13.1にアップグレードして解決しました。新しいバージョンでモデルを再構築した後、このエラーなしでロードできました。
from tensorflow.keras.initializers import glorot_uniform
loaded_model = tf.keras.models.load_model("pruned.h5",custom_objects={'GlorotUniform': glorot_uniform()})
テンソルフローケラスをインポートするときにこれは私のために働いた