Ich bin neu bei Keras und brauche deine Hilfe.
Ich trainiere ein neuronales Netz in Keras und meine Verlustfunktion ist die Quadrat-Differenz s / w-Netzleistung und der Zielwert.
Ich möchte dies mit Gradient Descent optimieren. Nachdem ich einige Links im Internet durchgesehen habe, habe ich festgestellt, dass es drei Arten von Gradientenabfahrten gibt, die allgemein verwendet werden:
- Gradientenabstieg einer einzelnen Probe : Hier wird der Gradient aus nur einer Probe pro Iteration berechnet -> Gradient kann verrauscht sein.
- Batch-Gradientenabstieg : Hier ist der Gradient der Durchschnitt der Gradienten, die aus ALLEN Stichproben im Datensatz berechnet wurden -> Der Gradient ist allgemeiner, aber für große Datensätze nicht zu handhaben.
- Mini-Batch-Gradientenabstieg : Ähnlich wie bei Batch GD. Anstatt den gesamten Datensatz zu verwenden, werden nur einige der Stichproben (bestimmt durch batch_size) verwendet, um den Gradienten in jeder Iteration zu berechnen -> Nicht sehr verrauscht und auch rechnerisch nachvollziehbar -> Das Beste aus beiden Welten.
Fragen:
- Ich möchte einen Mini-Batch-Gradientenabstieg in Keras durchführen. Wie kann ich das machen? Soll ich den SGD-Optimierer verwenden?
Wie setze ich die Batch-Größe, wenn SGD verwendet werden soll? Die SGD-Funktion scheint keinen Parameter zum Festlegen von batch_size zu haben.
optimizer = keras.optimizers.SGD(lr=0.01, decay=0.1, momentum=0.1, nesterov=False)
In model.fit () in Keras gibt es einen Parameter batch_size.
history = model.fit(x, y, nb_epoch=num_epochs, batch_size=20, verbose=0, validation_split=0.1)
Entspricht dies der Chargengröße in Mini-Batch Gradient Descent? Wenn nicht, was bedeutet es genau, auf einer Reihe von Eingaben zu trainieren? Bedeutet das, dass 'batch_size' Nr. von Threads parallel laufen und die Modellgewichte parallel aktualisieren?
Wenn es hilft, hier ist das Python-Code-Snippet, das ich bisher geschrieben habe .