だれかの備忘録

主に自分用。

TensorFlowでミニバッチサイズを変えてみた

簡単なCNN分類問題でミニバッチのサイズを変えるとどうなるか試してみました。

やったこと

サンプルプログラムは↓を使いました。
MNIST分類のCNNサンプルプログラム - だれかの備忘録
ミニバッチサイズを1~10000の9通り試します(サンプルでは50を使っています)
学習データ数は累計500000個。なので、Step数はミニバッチサイズが1なら500000まで、ミニバッチサイズが10000なら50まで。
各ミニバッチサイズで9回試行しました。分類のAccuracyを比較します。

Accuracyの比較

横軸はミニバッチサイズ、縦軸は分類のAccuracyです。
9回の試行のうち最大値と最小値をプロットしました。2つ目のグラフはAccuracy 0.95以上の拡大です。
f:id:positive_bedridden:20181230203621p:plain
f:id:positive_bedridden:20181230203635p:plain
9回の試行すべて良い結果になったのは意外にもミニバッチサイズ10~50だけでした。
ミニバッチサイズ5は最大値は一番いいけど、最小値は論外なので使えません。

処理時間の比較

処理時間も比較しました。
(環境はIntel Core i5-8400, Memory 16GB, Windows10 64bit のCPU処理です)
9回の試行の平均値をプロットしました。
f:id:positive_bedridden:20181230205814p:plain
ミニバッチサイズが増えるにつれて処理時間は短くなっていきます。
グラフには表れていませんが、さらにミニバッチサイズを増やすとメモリーがいっぱいになって極端に遅くなります。
Accuracyとして使えそうなのはミニバッチサイズ10か50だけでしたが、処理時間も考慮すると50が一番良さそうです。

まとめ

ミニバッチのサイズは大きすぎても小さすぎても良くないことが分かりました。何回か試行してみて安定して良い結果になるか確認する必要がありそうです。
また、メモリーに入る範囲ならミニバッチサイズは大きい方が処理時間は短くなりました。結果に差がないようならサイズは大きくした方が良さそうです。