頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


Kerasで係数の保存と読み込み

[TF]KerasでModelとParameterをLoad/Saveする方法
Kerasのcallbackを試す(modelのsave,restore/TensorBoard書き出し/early stopping)

↑この辺りを参考に係数の保存、読み込みを試してる。
というのも機械学習はMacが空いてる時間に計算させておく、、、ってのを何日もやったりするので、どうしても適当なタイミングで保存させ、起動時には最新の係数を読み込めるようにしたいのだ。
{
    json_string = open(os.path.join(f_model, model_filename)).read()
    model = model_from_json(json_string)
}
↑モデルの保存、読み込みもやってみたけどモデルの構成とかなので自分には必要性低そう。必要なのは係数の方なので。
{
    model.load_weights(os.path.join(f_model,weights_filename))
}
↑係数を読み込む。
{
    fileName = 'keras_weights.{epoch:02d}-{loss:.2f}-{val_loss:.2f}.hdf5'
    cp_cb = ModelCheckpoint(filepath = f_model+fileName, save_weights_only=True)
}
↑計算途中に、係数を保存するためのコールバックの設定。ファイル名にエポックの番号を使えるのは便利かもしれない。
{
    history = model.fit(x_train, y_train,
                    batch_size=batch_size,
                    initial_epoch = 0,
                    epochs=3,
                    callbacks=[cp_cb],
                    verbose=2, 
                    validation_data=(x_test, y_test))
}
↑訓練を実行する部分の記述。

initial_epochと組み合わせると,epochsは「最終エポック」として理解されることに注意してください. このモデルはepochsで与えられた反復回数の訓練をするわけではなく,単にepochsという指標に試行が達するまで訓練します.
↑リファレンスに書いてるようにinitial_epochとepochsを設定すればいいんだけど、ちょっとややこしいのが、例えば
initial_epoch = 0
epochs = 3
で実行したら上記の係数保存方法だとepochは1,2,3として保存されてる。

Kerasで生成した係数ファイル1

↑こんな感じ。

initial_epoch = 1
epochs = 3
にすると

Kerasで生成した係数ファイル2

↑epochは2,3の二つの係数ファイルが保存されてる(リファレンス通りepochsは回数じゃないね)。

initial_epoch + 1 の値から保存されるのでさらに継続する場合は
initial_epoch = 3
epochs = 7
とすると、、、

Kerasで生成した係数ファイル3

↑4〜7のファイルができた。

ということで、読み込んだ最新の係数ファイルのエポックの数値をinitial_epochとして与えればいいな。
スポンサーサイト

<< KerasでのTensorBoard関連の設定をする  TopPage  SceneKitのshaderModifiersで輪郭線を描く >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1178-ed8966f1




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad