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

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

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

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

機械学習

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

Python

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

Q&A

解決済

1回答

4858閲覧

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

yamasan_

総合スコア18

Keras

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

機械学習

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

Python

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

0グッド

0クリップ

投稿2018/11/14 06:19

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

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

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

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

該当のソースコード

python

1history = model.fit(X_train, Y_train, 2 batch_size=32, 3 epochs=1000, 4 validation_split=0.2, 5 verbose = 1 6 )

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

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

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

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

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

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

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

guest

回答1

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 06:27

編集2018/11/14 07:47
tiitoi

総合スコア21956

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

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

yamasan_

2018/11/14 06:48 編集

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

2018/11/14 06:49

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

2018/11/14 07:22

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

2018/11/14 07:48

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

2018/11/14 07:54

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問