質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

8415閲覧

keras で 任意のタイミングで学習を中断させ、中断した epoch から再開する方法

Ruthird

総合スコア15

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/31 13:17

編集2019/06/01 17:50

###前提

業務でかなりの量(組み合わせ)の オートエンコーダーの学習を行う予定です。

以下のように、学習中 1epoch毎 にモデルを保存(上書き)させていて、
もし学習済、または学習途中のモデルがある場合は、
その結果を使うよう以下のようなコードを書いてみました。

Python

1checkpoint = ModelCheckpoint(filepath = os.path.join(MODEL_DIR, "_model.h5")) 2 3 4(中略) 5 6 7if os.path.isfile(os.path.join(MODEL_DIR, "_model.h5")): 8 model.load_weights(os.path.join(MODEL_DIR, "_model.h5")) 9 10model.fit(Xtrain, Ytrain, 11 batch_size = BATCH_SIZE, epochs = NUM_EPOCHS, 12 validation_split = 0.2, 13 callbacks = [checkpoint, TensorBoard(log_dir = log_dir)])

###実現したいこと

この状態で強制的に訓練を停止させて再度実行してしまうと
最初から再開することになってしまうのですが
停止させた epoch から再開するにはどうすれば良いでしょうか?

###試したこと
model.fit() に initial_epoch の設定があり
デフォルトが0になっているから最初から再開することになることはわかったのですが、
ここの引数に停止させたときの epoch を後から入力させるのも手間だし、
突発で止まってしまったときは どこで止まったかがわからなくなってしまいます。

止めた時の epoch の情報がモデルデータなどから自動的にわかり、
そのまま実行をすればその epoch から再開できるようなコードの書き方はないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Q71

2019/09/24 14:07

その訓練用のコードには、訓練結果を確認するコードはついていないのでしょうか。訓練結果を確認する=保存したモデルを読み込む、です。これによって、各パラメータの初期値を変更できます。
Ruthird

2019/09/24 16:29

ご意見すみません。 自己解決してしまいましたので、自身がやりたかったことは 回答欄に記載しました。 訓練結果を見るコードももちろんあるのですが、 質問した際は訓練(学習)が終わってない状態の話でしたので その時点では扱っていませんでした。 訓練回数が多くなりそうだったので、途中で停止することを想定していたのですが、 モデルを読み込む=モデルを読み込んで結果を確認する ではなく、 モデルを読み込む=モデルを読み込んで訓練を再開する(続行する) 方法の質問をしたつもりでした。 分かりづらい質問で申し訳ありません。
guest

回答1

0

自己解決

長期間放置してしまい申し訳ありません。
その間に回答にたどり着いてしまいました。

for iter in range(STRAT_NUM + 1, NUM_ITERS + 1): hist = model.fit(X_train, y_train, batch_size = BATCH_SIZE, initial_epoch = (iter - 1) * NUM_EPOCHS, epochs = iter * NUM_EPOCHS, verbose = ver_num, shuffle = True, validation_data = (X_val, y_val))

と model.fit() を 普通に for文中 に置いてしまい、
for文中で model.fit() の後に model や weight の保存を行う。
ついでに weight のファイル名を iter から付けるようにする。

この状態で途中で停止した場合に途中から再開すると
initial_epoch に iter が入っており、
iter は START_NUM を weightのファイル名の 停止時の iter から読み込むようにすることで
停止させた タイミング(NUM_ITERS毎) から再開することができました。
(初めて学習するときは START_NUM = 0)

確認いただいた皆様、申し訳ありませんでした。

投稿2019/09/24 16:24

Ruthird

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問