web-dev-qa-db-ja.com

Kerasを使用して最終モデルを保存する方法は?

KerasClassifierを使用して分類器をトレーニングします。

コードは次のとおりです。

import numpy
from pandas import read_csv
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import LabelEncoder
from sklearn.pipeline import Pipeline
# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# load dataset
dataframe = read_csv("iris.csv", header=None)
dataset = dataframe.values
X = dataset[:,0:4].astype(float)
Y = dataset[:,4]
# encode class values as integers
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
#print("encoded_Y")
#print(encoded_Y)
# convert integers to dummy variables (i.e. one hot encoded)
dummy_y = np_utils.to_categorical(encoded_Y)
#print("dummy_y")
#print(dummy_y)
# define baseline model
def baseline_model():
    # create model
    model = Sequential()
    model.add(Dense(4, input_dim=4, init='normal', activation='relu'))
    #model.add(Dense(4, init='normal', activation='relu'))
    model.add(Dense(3, init='normal', activation='softmax'))
    # Compile model
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

    return model

estimator = KerasClassifier(build_fn=baseline_model, nb_Epoch=200, batch_size=5, verbose=0)
#global_model = baseline_model()
kfold = KFold(n_splits=10, shuffle=True, random_state=seed)
results = cross_val_score(estimator, X, dummy_y, cv=kfold)
print("Accuracy: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))

しかし、将来の予測のために最終モデルを保存する方法は?

私は通常、以下のコードを使用してモデルを保存します:

# serialize model to JSON
model_json = model.to_json()
with open("model.json", "w") as json_file:
    json_file.write(model_json)
# serialize weights to HDF5
model.save_weights("model.h5")
print("Saved model to disk")

しかし、保存モデルのコードをKerasClassifierのコードに挿入する方法がわかりません。

ありがとうございました。

33
yensheng

モデルにはsaveメソッドがあり、モデルを再構成するために必要なすべての詳細を保存します。 kerasドキュメント の例:

from keras.models import load_model

model.save('my_model.h5')  # creates a HDF5 file 'my_model.h5'
del model  # deletes the existing model

# returns a compiled model
# identical to the previous one
model = load_model('my_model.h5')
68
bogatron

モデルをjsonで保存し、重みをhdf5ファイル形式で保存できます。

# keras library import  for Saving and loading model and weights

from keras.models import model_from_json
from keras.models import load_model

# serialize model to JSON
#  the keras model which is trained is defined as 'model' in this example
model_json = model.to_json()


with open("model_num.json", "w") as json_file:
    json_file.write(model_json)

# serialize weights to HDF5
model.save_weights("model_num.h5")

ファイル「model_num.h5」および「model_num.json」が作成され、モデルと重みが含まれます

さらなるテストに同じトレーニング済みモデルを使用するには、単にhdf5ファイルをロードして、異なるデータの予測に使用できます。保存したファイルからモデルを読み込む方法は次のとおりです。

# load json and create model
json_file = open('model_num.json', 'r')

loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)

# load weights into new model
loaded_model.load_weights("model_num.h5")
print("Loaded model from disk")

loaded_model.save('model_num.hdf5')
loaded_model=load_model('model_num.hdf5')

さまざまなデータを予測するには、これを使用できます

loaded_model.predict_classes("your_test_data here")
18
MMK

model.save(filepath)を使用して、以下を含む単一のHDF5ファイルにKerasモデルを保存できます。

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

Pythonコードでは、最終行は次のようになります。

model.save("m.hdf5")

これにより、モデルの状態全体を単一のファイルに保存できます。保存されたモデルは、keras.models.load_model()を介して再インスタンス化できます。

load_model()によって返されるモデルは、すぐに使用できるコンパイル済みモデルです(保存されたモデルが最初にコンパイルされていない場合を除く)。

model.save()引数:

  • filepath:文字列、ウェイトを保存するファイルへのパス。
  • 上書き:ターゲットの場所にある既存のファイルをサイレントに上書きするか、ユーザーに手動プロンプトを提供するか。
  • include_optimizer:Trueの場合、オプティマイザーの状態を一緒に保存します。
6
prosti

この方法でモデルを保存してロードできます。

from keras.models import Sequential
from keras_contrib.losses import import crf_loss
from keras_contrib.metrics import crf_viterbi_accuracy

# To save model
model.save('my_model_01.hdf5')

# To load the model
custom_objects={'CRF': CRF,'crf_loss':crf_loss,'crf_viterbi_accuracy':crf_viterbi_accuracy}

# To load a persisted model that uses the CRF layer 
model1 = load_model("/home/abc/my_model_01.hdf5", custom_objects = custom_objects)
2