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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

3823閲覧

fit_generatorにおけるバッチ処理とエポックの関係

sakura_hana

総合スコア11427

Keras

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

2クリップ

投稿2019/03/27 02:49

Kerasのfit_generatorを用いた画像認識用の学習を行っているのですが、
バッチ処理とエポックの関係について理解が足りていないので教えて頂きたく思います。
(とりあえず実働はしているのですが、どういう流れで動いているか把握しきれていない状態です)

前提条件として、学習用画像が2000枚(100種類のラベルが存在し、1ラベルにつき20枚の画像が存在)、
バッチ数を32、エポック数を10としています。(評価用画像は今は割愛)


質問1.steps_per_epoch = 2000 / 32 = 62としました。
Sequentialモデル - Keras Documentation
のsteps_per_epochにある「典型的には」の計算式を用いています(画像総数/バッチ数)
この場合、以下のような挙動をするという認識で合っていますでしょうか?

■1エポック目 ・1回目のバッチ処理:1〜32枚目の画像を学習 ・2回目のバッチ処理:33〜64枚目の画像を学習 …… ・62回目のバッチ処理:2017〜2048枚目の画像を学習(実際は17〜48枚目?) ■以降10エポック目まで1エポック目と同じことの繰り返し →結果的に2048枚を10回学習する。

質問2.一部分ごとの学習がしたかった為、steps_per_epoch = 2000 / 32 / 10 = 6としました。
この場合、以下のような挙動をするという認識で合っていますでしょうか?

■1エポック目 ・1回目のバッチ処理:1〜32枚目の画像を学習 ・2回目のバッチ処理:33〜64枚目の画像を学習 …… ・6回目のバッチ処理:161〜192枚目の画像を学習 ■2エポック目 ・1回目のバッチ処理:193〜224枚目の画像を学習 ・2回目のバッチ処理:224〜256枚目の画像を学習 …… ・6回目のバッチ処理:353〜384枚目の画像を学習 (以下省略) →結果的に steps_per_epoch*エポック数*バッチ = 6*10*32 = 1920枚 を1回学習する。

質問3.質問2が正しい場合。
steps_per_epoch=6, initial_epoch=1, epochs=2と設定したfit_generatorを2回呼んだとします。
この場合、「質問2の2エポック目(193〜384枚目)を2回学習する(他の画像は学習しない)」という扱いになるのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問1

その認識であっています。

質問2

その認識であっています。
steps_per_epoch は名前の通り、1エポックあたりのステップ数を表します。
例えば、サンプル数が1000でバッチサイズが10であれば、100ステップで全部のデータをモデルに1回分流したことになるので、これで1エポックです。

どうしてこの引数を指定する必要があるのかというと、fit() と違い、fit_generator() は渡されたジェネレーターが画像を生成するので、1エポックが何ステップかというのが関数側で分からないからです。

例えば、ジェネレーターに Keras の ImageDataGenerator を利用した場合、このジェネレーターは無限に画像を生成できます。

質問3.
steps_per_epoch=6, initial_epoch=1, epochs=2と設定したfit_generatorを2回呼んだとします。
この場合、「質問2の2エポック目(193〜384枚目)を2回学習する(他の画像は学習しない)」という扱いになるのでしょうか?

ジェネレーターが生成する画像は続きからになるので、
steps_per_epoch=6, initial_epoch=1, epochs=2 で2回呼ぶのは
steps_per_epoch=6, initial_epoch=1, epochs=4 と同じ結果になります。

投稿2019/03/27 02:56

編集2019/03/27 03:06
tiitoi

総合スコア21956

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

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

sakura_hana

2019/03/27 07:07

ありがとうございます。お陰様で理解が進みました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問