ホーム < ゲームつくろー! < IKD備忘録

VisualStudio + Pythonでディープラーニング
モデルの保存とリロード

(2018. 11. 23)


 前章でニューラルネットワークのフレームワークライブラリであるKerasを用いてSequentialモデルの作り方をざざっと見てきました。手順通りにすれば何らかの振る舞いをするモデルが作られます。ただ、pyrhonのプログラムが終了すると、モデルも消えてしまいます。毎度プログラムを実行する度に時間のかかるパラメータ推定からやり直しでは埒が明きません。一度訓練したモデルはやはり使いまわしたり、さらに訓練を重ねてもっと賢くしたいわけです。その為には作成したモデルの保存とリロードが必要になります。



@ 訓練したモデルの保存

 空のSequentialモデルにDenseレイヤーを連ね、compileで訓練プロセスを決定し、fitメソッドへ訓練データを流し込めば何らかの振る舞いをするモデルが作成されます。Kerasにはそうして作成されたモデルをファイルに保存する仕組みがちゃんと用意されていて、Sequentialなどのモデルクラスが持つsaveメソッドを使います:

import keras
from keras.models import Sequential
from keras.layers import Dense

model = Sequential()

...

model.save( "test_model.hdf5" )

saveメソッドには保存したいファイル名を引数に与えます。拡張子等に制約は特にありません。HDF5形式という科学計算の情報などを保存するフォーマットで保存されるそうです。kerasを使う分にはフォーマットについて意識する事はありません。



A 保存したモデルのリロード

 @でHDF5形式で保存したモデルはkeras.models.load_model関数を使うとリロード出来ます:

import keras
from keras.models import Sequential
from keras.layers import Dense
import sys

try:
    model = keras.models.load_model( "test_model.hdf5" )
except OSError:
    print( "Failed to load model." )
    sys.exit()

 load_model関数の引数にはモデルを保存したファイル名を渡します。リロードに成功したら戻り値にセーブ時のモデルが完全にロードされます。もし失敗した場合(ファイル名が異なるなど)例外が発生するのでtry〜exceptでそれを受けてあげましょう。

 これでリロードしたモデルを使って直ぐに本番データを適用する事が出来ます。またさらに訓練データを食わせてより賢くするなども出来ますし、万が一間違った訓練をしてモデル内パラメータが壊れてしまった場合もやり直しがききます。モデルのパラメータ推定は時間も手間もかかりますので、こまめにバックアップを取ってあげて、大切にすくすくと育てて下さい(^-^)