public override double BackwardPassLoss(int correctIndex) { InVolume.SetDConstant(0); var rawIn = InVolume.dWeightsRaw; for (var i = 0; i < OutDepth; i++) { var indicator = i == correctIndex ? 1.0 : 0.0; var mul = -(indicator - _es[i]); rawIn[i] = mul; } return(-Math.Log(_es[correctIndex])); }
public override void BackwardPass() { InVolume.SetDConstant(0); for (var i = 0; i < OutDepth; i++) { var filter = Weights[i]; var chain = OutVolume.dWeights[i]; for (var d = 0; d < _inputsCount; d++) { InVolume.dWeights[d] += filter.Weights[d] * chain; filter.dWeights[d] += InVolume.Weights[d] * chain; } Biases.dWeights[i] += chain; } }
public override void BackwardPass() { InVolume.SetDConstant(0); var rawOut = OutVolume.WeightsRaw; var rawDOut = OutVolume.dWeightsRaw; var rawDIn = InVolume.WeightsRaw; for (var i = 0; i < InVolume.dWeightsRawLen; i++) { if (rawOut[i] <= 0) { rawDIn[i] = 0; } else { rawDIn[i] = rawDOut[i]; } } }
public override void BackwardPass() { InVolume.SetDConstant(0); var n = 0; for (var d = 0; d < OutDepth; d++) { var x = -Pad; for (var ax = 0; ax < OutSize.Width; ax++, x += Stride) { var y = -Pad; for (var ay = 0; ay < OutSize.Height; ay++, y += Stride) { var chain = OutVolume.GetGrad(ax, ay, d); InVolume.AddGrad(_oldX[n], _oldY[n], d, chain); n++; } } } }