コード例 #1
0
ファイル: SoftmaxLayer.cs プロジェクト: Coestaris/mllib
        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]));
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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];
                }
            }
        }
コード例 #4
0
ファイル: SubsamplingLayer.cs プロジェクト: Coestaris/mllib
        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++;
                    }
                }
            }
        }