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

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

ただいまの
回答率

90.48%

  • Python

    12201questions

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

  • 機械学習

    983questions

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

  • TensorFlow

    947questions

  • Keras

    505questions

Batch_Sizeの適応される部分について

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 565

yamasan_

score 6

機械学習の勉強をしている大学生です。
python,tensorflow,kerasを用いて2クラス分類を行うプログラムを書いています。
プログラムの大部分をkerasを用いて書いております。 

kerasを用いてプログラムを書いているのですが、batch_sizeについてよくわからない部分があるので質問させていただきます。
自分は学習させるときに学習データとして、複数のcsvファイルを用いて学習させています。

-data
 -csv_file
  -1.csv
  -2.csv
  .
  .
  .


のようなファイル構造になっています(わかりづらくてすみません)。
このcsvファイルはすべて128行3列のデータとなっています。

 該当のソースコード

history = model.fit(X_train, Y_train,
                    batch_size=32,
                    epochs=1000,
                    validation_split=0.2,
                    verbose = 1
                    )


この場合のbacth_sizeというのは、ファイル毎に32個まとめて学習をさせているのでしょうか?
それとも、ファイルの中身(128行3列)を32行ごとにまとめて学習させているのでしょうか?

もし根本から間違っている場合はご教授を願いたいです。
よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

fit() では、X_train の全サンプルからバッチサイズ個ずつ順番に順伝搬、逆伝搬を行い、重みを更新します。

Model.fit() 関数に shuffle=True という引数があるため、

X_train = [A, B, C, D, E, F]、BatchSize = 2 としたとき、

shuffle=False の場合

  1. [A, B] を流して、順伝搬、逆伝搬で重み更新
  2. [C, D] を流して、順伝搬、逆伝搬で重み更新
  3. [E, F] を流して、順伝搬、逆伝搬で重み更新
  4. 1~3 で1エポック、これを指定エポック分繰り返す。

shuffle=True の場合

  1. シャッフルする。[C, E, A, B, D, F] これはエポックごとに行われる。
  2. [C, E] を流して、順伝搬、逆伝搬で重み更新
  3. [A, B] を流して、順伝搬、逆伝搬で重み更新
  4. [D, F] を流して、順伝搬、逆伝搬で重み更新
  5. 1~3 で1エポック、これを指定エポック分繰り返す。

となります。

 追記

学習の際のバッチサイズは 32, 64, 128 などがよく使われますね。
一概に学習がうまくいく大きさをいろいろ試してみるとよいと思います。

大きくするメリット

  • 計算時間が早くなる。一度に大量のデータを処理したほうが効率がいい。

大きくするデメリット

  • 必要がメモリ量が増える。大きくしすぎるとメモリの乗り切らなくてエラー。
  • 局所解に陥り、学習が停滞する可能性がある。(バッチ勾配降下法の仕組み)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/14 15:46 編集

    わかりやすい具体例をありがとうございます。
    別の部分で
    result = model.predict(X_test, batch_size=32, verbose=True)
    というものを用いているのですが、このbatch_sizeも同様の考え方ができるという解釈でよろしいでしょうか?

    キャンセル

  • 2018/11/14 15:49

    その認識であっていますが、predict() の場合は順伝搬のみ行います。また、シャッフルはする意味がないので、行いません。
    なので、X_test と result の結果の行は対応しています。

    キャンセル

  • 2018/11/14 16:22

    ありがとうございます。
    少し別の質問になるのですが、Model.fit()関数でのbatchsizeとpredict()でのbatchsizeはそれぞれ別のものだと思うのですが、それぞれどのような値にすべきなのかいまいちわかりません。何か良い指標などはありますか?

    キャンセル

  • 2018/11/14 16:48

    追記しました。学習の際のバッチサイズはケースバイケースなんで、いろいろ試して精度が出るものを使用してください。
    推論の際はメモリに乗り切る範囲で大きい値にすればよいです。

    キャンセル

  • 2018/11/14 16:54

    追記ありがとうございます。
    多分これが最後の質問なのですが、
    X_train = [A, B, C, D, E, F]、BatchSize = 12 としたとき、つまりbatchsizeのほうが大きいとき、model.fit()関数はどのような流れで進んでいくのでしょうか?
    わかりづらい質問で申し訳ありません。

    キャンセル

  • 2018/11/14 17:01

    batch_size=6 (サンプル数) として扱われれます。
    公式ドキュメントに記載がない事項に関してはソースを見るしかありません。

    https://github.com/keras-team/keras/blob/master/keras/engine/training_utils.py

    の def make_batches(size, batch_size) 参照

    キャンセル

同じタグがついた質問を見る

  • Python

    12201questions

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

  • 機械学習

    983questions

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

  • TensorFlow

    947questions

  • Keras

    505questions