Linux 64マシンでkerasシーケンシャルモデルをトレーニングし、.h5ファイルに保存しました。
このPCでモデルをロードして、問題なく予測を行うことができます。
現在、keras、tensorflow、h5py、python3をインストールしたRaspberry Pi 3に予測を実装しています。
モデルをロードするとき
from keras.models import load_model
model = load_model('model-0.6358.h5')
、私は得ています:
usr/lib/python3.4/importlib/_bootstrap.py:321: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
return f(*args, **kwds)
/usr/local/lib/python3.4/dist-packages/keras/models.py:291: UserWarning: Error in loading the saved optimizer state. As a result, your model is starting with a freshly initialized optimizer.
warnings.warn('Error in loading the saved optimizer '
しかし...それは正しく予測しているように見えます。
その警告メッセージを回避するにはどうすればよいですか?
_load_model
_は、まず保存された重みを使用して保存されたモデルアーキテクチャを構築し、次に保存された重みを使用して保存されたオプティマイザを構築しようとします。
ただし、保存されたオプティマイザの重みの形状と、ロードされたモデルのアーキテクチャに基づいてオプティマイザが予期している重みの形状の間に不一致があるため、エラーメッセージが表示されます。
_trainable=False
_に設定された内部サブモデルを持つモデルを保存して再ロードしようとしたときに、Keras 2.1.4を使用してこの問題に遭遇しました。この情報はモデルを保存するときに保持されないようです。そのため、内部サブモデルを再インスタンス化した後、_trainable=True
_に設定され、オプティマイザは実際に保存されるよりも多くの保存された重みを期待します。これがあなたのケースの問題である可能性がある場合、私は this bug-report で回避策を説明しました:
警告を取り除き、保存後にオプティマイザが必要ない場合は、オプティマイザなしでモデルを保存することもできます。model.save(filename, include_optimizer=False)
を使用します