Ich habe die ANN für Zwei-Schicht-Netzwerk implementiert, ich muss meine Gewicht Update-Code mit Schwung ändern, aber ich muss wissen, wie ich es aktualisieren kann. unten ist der Code-Snap nur der Gewichtsaktualisierung. Der folgende Code aktualisiert das Gewicht für jedes Beispiel, das es gesehen hat. Die hiddenWights sind das Gewicht der versteckten Ebene und die outputWeights sind die Gewichtungen der Ausgabeebene.Hinzufügen von Momentum-Term im Online-Back-Propagation-Gewicht-Update?
for examplen = 1: nTrainingExamples
inputVector = inputs(:,examplen);
HiddenLayerOutput = sigmoid(hiddenWeights * inputVector);
OutputLayerOutput = sigmoid(outputWeights * HiddenLayerOutput);
l2_error = OutputLayerOutput - targets(:, examplen);
l2_delta = learningRates(1, i) .* (OutputLayerOutput .* (1 - OutputLayerOutput)) .* l2_error;
l2_v = mu * l2_v - l2_delta * t;
l1_delta = learningRates(1, i) .* (HiddenLayerOutput .* (1 - HiddenLayerOutput)) .* (outputWeights' * l2_delta);
l1_v = mu * l1_v - l1_delta * t;
% weights = weights + v
outputWeights = outputWeights + (l2_v*HiddenLayerOutput');
hiddenWeights = hiddenWeights + (l1_v*inputVector');
end
Welche Art von Impuls möchten Sie implementieren? Ein Klassiker oder ein Nestrov? –
Ich muss nur Schwung Update hinzufügen, ich weiß nicht genau, was der Unterschied zwischen klassischen oder ein Nestrow? –
Überprüfen Sie diesen Beitrag: http://stats.stackexchange.com/questions/179915/whats-the-difference-between-momentum-based-gradient-descent-and-nesterovs-ac –