web-dev-qa-db-ja.com

ケラスで重量を保存およびロードする

トレーニングしたモデルからウェイトを保存およびロードしようとしています。

モデルの保存に使用するコードは次のとおりです。

TensorBoard(log_dir='/output')
model.fit_generator(image_a_b_gen(batch_size), steps_per_Epoch=1, epochs=1)
model.save_weights('model.hdf5')
model.save_weights('myModel.h5')

これが不適切な方法である場合、またはより良い方法がある場合はお知らせください。

しかし、これを使用してそれらをロードしようとすると、

from keras.models import load_model
model = load_model('myModel.h5')

しかし、私はこのエラーが発生します:


ValueError                                Traceback (most recent call 
last)
<ipython-input-7-27d58dc8bb48> in <module>()
      1 from keras.models import load_model
----> 2 model = load_model('myModel.h5')

/home/decentmakeover2/anaconda3/lib/python3.5/site-
packages/keras/models.py in load_model(filepath, custom_objects, compile)
    235         model_config = f.attrs.get('model_config')
    236         if model_config is None:
--> 237             raise ValueError('No model found in config file.')
    238         model_config = json.loads(model_config.decode('utf-8'))
    239         model = model_from_config(model_config, 
custom_objects=custom_objects)

ValueError: No model found in config file.

私が間違っているかもしれないことに関する提案はありますか?前もって感謝します。

34
Ryan

やりたいことを正確に説明したYouTubeビデオを次に示します。 Kerasモデルを保存して読み込む

Kerasが利用できる3つの異なる保存方法があります。これらについては、上記のビデオリンク(例とともに)と以下で説明します。

まず、エラーが発生する理由は、load_modelを間違って呼び出しているためです。

モデルの重みを保存およびロードするには、最初に使用します

model.save_weights('my_model_weights.h5')

表示したとおりに重みを保存します。重みをロードするには、最初にモデルを構築し、次にモデルでload_weightsを呼び出す必要があります。

model.load_weights('my_model_weights.h5')

別の保存方法はmodel.save(filepath)です。このsave関数は以下を保存します。

  • モデルのアーキテクチャ。モデルを再作成できます。
  • モデルの重み。
  • トレーニング構成(損失、オプティマイザー)。
  • オプティマイザーの状態。中断したところからトレーニングを再開できます。

この保存されたモデルをロードするには、次を使用します。

from keras.models import load_model
new_model = load_model(filepath)'

最後に、model.to_json()は、モデルのアーキテクチャのみを保存します。アーキテクチャをロードするには、次を使用します

from keras.models import model_from_json
model = model_from_json(json_string)
61

weightsをロードするには、最初にモデルが必要です。それは違いない:

existingModel.save_weights('weightsfile.h5')
existingModel.load_weights('weightsfile.h5')     

モデル全体を保存およびロードする場合(多くの場合、これは機能せず、理由はわかりません):

model.save_model('filename')
model = load_model('filename')
8
Daniel Möller