Ich benutze Python Keras package
für neuronales Netzwerk. Dies ist der Link . Ist batch_size
gleich der Anzahl von Testproben? Aus Wikipedia haben wir diese Informationen:
In anderen Fällen kann das Auswerten des Summengradienten jedoch teure Auswertungen der Gradienten von allen Summandenfunktionen erfordern. Wenn der Trainingssatz riesig ist und keine einfachen Formeln existieren, wird die Auswertung der Summen von Verläufen sehr teuer, da die Auswertung des Verlaufs die Auswertung aller Verläufe der Summandenfunktionen erfordert. Um bei jeder Iteration Rechenaufwand zu sparen, tastet der stochastische Gradientenabstieg bei jedem Schritt eine Teilmenge von Summandenfunktionen ab. Dies ist bei großen maschinellen Lernproblemen sehr effektiv.
Die obigen Informationen beschreiben Testdaten? Ist dies dasselbe wie batch_size
in Keras (Anzahl der Proben pro Gradientenaktualisierung)?
quelle
Antworten:
Die Stapelgröße definiert die Anzahl der Proben, die über das Netzwerk übertragen werden.
Nehmen wir zum Beispiel an, Sie haben 1050 Trainingsmuster und möchten einen
batch_size
Wert von 100 einstellen . Der Algorithmus entnimmt die ersten 100 Muster (vom 1. bis zum 100.) aus dem Trainingsdatensatz und trainiert das Netzwerk. Als nächstes werden die zweiten 100 Samples (vom 101. bis zum 200.) genommen und das Netzwerk erneut trainiert. Wir können diesen Vorgang fortsetzen, bis wir alle Samples durch das Netzwerk weitergegeben haben. Möglicherweise tritt ein Problem mit dem letzten Probensatz auf. In unserem Beispiel haben wir 1050 verwendet, was ohne Rest nicht durch 100 teilbar ist. Die einfachste Lösung besteht darin, nur die letzten 50 Proben abzurufen und das Netzwerk zu trainieren.Vorteile bei Verwendung einer Losgröße <Anzahl aller Proben:
Es benötigt weniger Speicher. Da Sie das Netzwerk mit weniger Samples trainieren, benötigt der gesamte Trainingsvorgang weniger Speicher. Dies ist besonders wichtig, wenn Sie nicht in der Lage sind, den gesamten Datensatz in den Speicher Ihres Computers einzupassen.
In der Regel trainieren Netzwerke mit Minibatches schneller. Das liegt daran, dass wir die Gewichte nach jeder Weitergabe aktualisieren. In unserem Beispiel haben wir 11 Batches weitergegeben (10 davon hatten 100 Samples und 1 hatte 50 Samples) und nach jedem haben wir die Parameter unseres Netzwerks aktualisiert. Wenn wir alle Samples während der Propagierung verwenden würden, würden wir nur 1 Update für die Netzwerkparameter durchführen.
Nachteile der Verwendung einer Chargengröße <Anzahl aller Proben:
Stochastisch ist nur ein Mini-Batch mit dem
batch_size
Wert 1. In diesem Fall ändert der Gradient seine Richtung noch häufiger als ein Mini-Batch-Gradient.quelle
batch_size=1
. Die Idee hinter dem Online-Lernen ist, dass Sie Ihr Modell aktualisieren, sobald Sie das Beispiel sehen. Bei größeren Chargen bedeutet dies, dass Sie zuerst die mehreren Proben durchsuchen, bevor Sie die Aktualisierung durchführen. In RNN kann die Größe der Charge unterschiedliche Bedeutungen haben. Normalerweise ist es üblich, die Trainingssequenz in Fenster fester Größe (wie 10 Wörter) aufzuteilen. In diesem Fall bedeutet das Einschließen von 100 dieser Fenster während des Trainings, dass Sie habenbatch_size=100
.In der neuronalen Netzwerkterminologie:
Beispiel: Wenn Sie 1000 Trainingsbeispiele haben und Ihre Stapelgröße 500 ist, werden 2 Iterationen benötigt, um 1 Epoche abzuschließen.
FYI: Kompromiss zwischen Stapelgröße und Anzahl der Iterationen zum Trainieren eines neuronalen Netzwerks
quelle
Wenn Sie ein Optimierungsproblem mit einer CPU lösen, wenden Sie iterativ einen Algorithmus auf einige Eingabedaten an. In jeder dieser Iterationen aktualisieren Sie normalerweise eine Metrik Ihres Problems, indem Sie einige Berechnungen für die Daten durchführen. Wenn die Größe Ihrer Daten groß ist, kann es einige Zeit dauern, bis jede Iteration abgeschlossen ist, und es kann eine Menge Ressourcen verbraucht werden. Manchmal wählen Sie diese iterativen Berechnungen für einen Teil der Daten aus, um Zeit und Rechenressourcen zu sparen. Dieser Teil ist batch_size und der Prozess wird (im Neural Network Lingo) Stapelverarbeitung genannt. Wenn Sie Ihre Berechnungen auf alle Ihre Daten anwenden, führen Sie eine Online-Datenverarbeitung durch. Ich denke, die Terminologie stammt aus den 60ern und noch früher. Erinnert sich jemand an die. bat DOS-Dateien? Aber natürlich bedeutet das inkarnierte Konzept einen Thread oder einen Teil der Daten, die verwendet werden sollen.
quelle
Die Dokumentation für
Keras
etwa Chargengröße können Sie unter der findenfit
Funktion in den Modellen (funktionale API) SeiteWenn Sie einen kleinen Datensatz haben, ist es am besten, die Stapelgröße an die Größe der Trainingsdaten anzupassen. Versuchen Sie es zuerst mit einer kleinen Charge und erhöhen Sie dann die Menge, um Zeit zu sparen. Wie bereits erwähnt, gibt es einen Kompromiss zwischen Genauigkeit und Geschwindigkeit.
quelle