私が読んでいる紹介文書( TOC here )では、定義せずに ここの用語 を紹介しています。
[1] https://www.tensorflow.org/get_started/
[2] https://www.tensorflow.org/tutorials/mnist/tf/
数字認識(MNIST)を実行し、ネットワークのアーキテクチャ(CNN)を定義したとしましょう。これで、トレーニングデータから画像を1つずつネットワークに送り始め、予測を取得できます(このステップが「inference」と呼ばれるまで)、損失を計算し、計算します勾配を設定し、ネットワークのパラメーター(つまりweightsおよびbiases)を更新してから、次の画像に進みます。 。モデルをトレーニングするこの方法は、オンライン学習と呼ばれることもあります。
ただし、トレーニングを高速化し、勾配のノイズを少なくし、配列操作の実行に効率的なGPUのパワーを活用したい場合(nD-arraysto具体的に)。したがって、代わりに行うことは、一度に100画像をフィードすることです(このサイズの選択はあなた次第です(つまり、hyperparameter)そしてあなたの問題にも依存します)。たとえば、下の写真を見てください(著者:Martin Gorner)
ここでは、100枚の画像をフィードしているので(28x28
)一度に(オンライントレーニングの場合のように1ではなく)、バッチサイズは100です。多くの場合、これはミニバッチサイズまたは単にmini-batch
。
また、以下の画像:(著者:Martin Gorner)
これで、行列乗算はすべて完全にうまく機能し、高度に最適化された配列演算を利用できるため、トレーニング時間を短縮できます。
上記の画像を観察する場合、100または256または2048または10000(batch size)画像を与えるかどうかは、メモリに収まる限りは重要ではありません(GPU)ハードウェア。あなたは単純に多くの予測を得るでしょう。
ただし、このバッチサイズは、トレーニング時間、達成するエラー、勾配シフトなどに影響することに注意してください。どのバッチに関する一般的な経験則はありません。サイズが最適です。いくつかのサイズを試して、最適なサイズを選択してください。ただし、データが過剰になるため、大きなバッチサイズを使用しないでください。人々は通常、32, 64, 128, 256, 512, 1024, 2048
。
ボーナス:このバッチサイズでどれだけクレイジーなことができるかをよく理解するには、このペーパーを読んでください: weird trick for CNNの並列化