Kerasモデルの保存と呼び出し


一、モデルの保存(構造+重み+オプティマイザ状態)
1、model.save('model.h 5')#modelというh 5ファイルをプログラムが存在するディレクトリに保存model.save(filepath)を使用して、Kerasモデルを単一のHDF 5ファイルに保存できます.このファイルには次のものが含まれます.
  • モデルの構造で、モデル
  • を再作成できます.
  • モデルの重み
  • トレーニング構成項目(損失関数、オプティマイザ)
  • オプティマイザのステータスで、前回終了した場所から正確にトレーニングを継続できます.

  • 2.ウェイトやトレーニング設定ではなく、モデルの構造を保存する必要がある場合は、次の操作を行います.
    #     JSON
    json_string = model.to_json()
    
    #     YAML
    yaml_string = model.to_yaml()
    

    これらのデータから新しいモデルを作成できます.
    #   JSON     :
    from keras.models import model_from_json
    model = model_from_json(json_string)
    
    #   YAML     :
    from keras.models import model_from_yaml
    model = model_from_yaml(yaml_string)
    

     
    3、モデルのウェイトのみ保存/ロード
    モデルの重みだけが必要な場合は、次のコードを使用してHDF 5形式で保存できます.
    まず、Kerasに含まれていないHDF 5とPythonライブラリh 5 pyをインストールする必要があります.
    model.save_weights('my_model_weights.h5')
    

    モデルをインスタンス化するためのコードがある場合は、保存したウェイト値を同じ構造のモデルにロードできます.
    model.load_weights('my_model_weights.h5')
    

    ウェイトを別の構造(共通のレイヤがいくつかある)のモデルにロードする必要がある場合は、微調整や移行学習など、レイヤの名前でウェイトをロードできます.
    model.load_weights('my_model_weights.h5', by_name=True)
    

    例:
    """
              :
        model = Sequential()
        model.add(Dense(2, input_dim=3, name='dense_1'))
        model.add(Dense(3, name='dense_2'))
        ...
        model.save_weights(fname)
    """
    
    #    
    model = Sequential()
    model.add(Dense(2, input_dim=3, name='dense_1'))  #     
    model.add(Dense(10, name='new_dense'))  #      
    
    #           ;       ,dense_1
    model.load_weights(fname, by_name=True)
    

    二、モデルのロード
        from keras.models import load_model     model = load_model('model.h 5')#ロードプログラムが存在するディレクトリのmodelというh 5モデルフレームワークパラメータ
    三、モデル使用(画像分類モデル)
    1、model.predict()
    predict()法を用いて予測する場合、戻り値は数値であり、サンプルが各カテゴリに属する確率を表し、numpyを用いることができる.argmax()法は,試料が最大確率で属するカテゴリを試料の予測ラベルとして見つけた.
    numpy.Argmax(a)は配列aの最大値が位置する位置を返す
    #        
    preds = model.predict(x)
    print(pred)
    #  [[2.69979779e-07 1.50991557e-03 9.40957308e-01 1.53805502e-09
      5.74169382e-02 2.00743049e-08 5.82429775e-13 1.47752353e-08
      6.25503671e-05 5.33912718e-08 4.72215740e-18 2.97202235e-16
      8.11012334e-19 7.12863546e-10 1.55264762e-17 5.29809076e-05
      7.24748874e-13 2.17059953e-23 6.66066933e-14 2.31473064e-14
      3.67295783e-22 1.20753088e-08 1.15534161e-15 1.17659593e-17
      1.29246865e-11 4.85833094e-14 8.04590889e-18 3.75492511e-16
      2.33098371e-12 1.86269444e-09 6.25299688e-20 8.06493845e-16
      3.69524827e-10 2.54514406e-15 6.45201473e-17 2.72551604e-14
      3.49192212e-15 1.93733091e-21 1.64267204e-16 1.12610542e-15
      1.17868511e-13 6.89566958e-18 1.75072841e-19]]
    

     2、 predict_classes()メソッド
    predit_を使用する場合classes()メソッドが予測すると、カテゴリのインデックス、すなわちサンプルが属するカテゴリラベルが返されます.
    model.predict_classes(image)
    出力:array([2],dtype=int 64)、画像が存在する種類.