2層ネットワークのANNを実装しましたが、体重更新コードを勢いよく変更する必要がありますが、どうすれば更新できるのかを知る必要があります。以下は重量更新のみのコードスナップです。下のコードは、見た各例の重みを更新します。hiddenWightsは隠れ層の重みです。また、outputWeightsは出力層の重みです。オンラインバックプロパゲーション重量更新の運動量項を追加するか?
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
実装したい勢いは何ですか?古典的なものかNestrovのものか? –
私はちょうど勢いの更新を追加する必要があります、私は正確に古典またはネスストの違いはわからないのですか? –
この記事をチェックしてください:http://stats.stackexchange.com/questions/179915/whats-the-difference-between-momentum-based-gradient-descent-and-nesterovs-ac –