web-dev-qa-db-ja.com

TensorFlowのバッチとは何ですか?

私が読んでいる紹介文書( 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)

Batch size of 100

ここでは、100枚の画像をフィードしているので(28x28)一度に(オンライントレーニングの場合のように1ではなく)、バッチサイズは100です。多くの場合、これはミニバッチサイズまたは単にmini-batch


また、以下の画像:(著者:Martin Gorner)

batch size again

これで、行列乗算はすべて完全にうまく機能し、高度に最適化された配列演算を利用できるため、トレーニング時間を短縮できます。

上記の画像を観察する場合、100または256または2048または10000(batch size)画像を与えるかどうかは、メモリに収まる限りは重要ではありません(GPU)ハードウェア。あなたは単純に多くの予測を得るでしょう。

ただし、このバッチサイズは、トレーニング時間、達成するエラー、勾配シフトなどに影響することに注意してください。どのバッチに関する一般的な経験則はありません。サイズが最適です。いくつかのサイズを試して、最適なサイズを選択してください。ただし、データが過剰になるため、大きなバッチサイズを使用しないでください。人々は通常、32, 64, 128, 256, 512, 1024, 2048


ボーナス:このバッチサイズでどれだけクレイジーなことができるかをよく理解するには、このペーパーを読んでください: weird trick for CNNの並列化

46
kmario23