示例#1
0
        private void _setInputGradient(List <NetworkVector> outputGradientParts)
        {
            List <NetworkVector> inputGradientParts = new List <NetworkVector>();

            foreach (NetworkVector outputGradientPart in outputGradientParts)
            {
                inputGradientParts.Add(_weights.DotWithWeightsPerInput(outputGradientPart));
            }
            _inputGradient = NetworkVector.Concatenate(inputGradientParts);
        }
示例#2
0
        public override NetworkVector InputGradient(NetworkVector outputgradient)
        {
            if (outputgradient == null || outputgradient.Dimension != NumberOfOutputs)
            {
                throw new ArgumentException("outputgradient may not be null and must have dimension equal to NumberOfNeurons.");
            }

            List <NetworkVector> inputGradientParts = new List <NetworkVector>();

            foreach (NetworkVector outputGradientPart in _segment(outputgradient))
            {
                inputGradientParts.Add(Weights.DotWithWeightsPerInput(outputGradientPart));
            }

            return(NetworkVector.Concatenate(inputGradientParts));
        }
示例#3
0
        public override void Run(NetworkVector inputvalues)
        {
            if (inputvalues.Dimension != NumberOfInputs)
            {
                throw new ArgumentException("Input dimension does not match this Layer.");
            }

            _inputs     = inputvalues;
            _inputParts = inputvalues.Segment(_repetitions);
            List <NetworkVector> outputParts = new List <NetworkVector>();

            foreach (NetworkVector inputPart in _inputParts)
            {
                outputParts.Add(_biases.SumWith(_weights.LeftMultiply(inputPart)));
            }
            _output = NetworkVector.Concatenate(outputParts);
        }
示例#4
0
        public override void BackPropagate(NetworkVector outputgradient)
        {
            if (outputgradient.Dimension != NumberOfOutputs)
            {
                throw new ArgumentException("The dimension of outputgradient does not match this WeightedCombiner.");
            }

            List <NetworkVector> inputGradients      = new List <NetworkVector>();
            List <NetworkVector> outputGradientParts = outputgradient.Segment(_bankWidth);

            foreach (NetworkVector outputGradientPart in outputGradientParts)
            {
                _layer.BackPropagate(outputGradientPart);
                inputGradients.Add(_layer.InputGradient);
            }
            _inputGradient = NetworkVector.Concatenate(inputGradients);
        }
示例#5
0
        protected override NetworkVector _run(NetworkVector inputvalues)
        {
            if (inputvalues.Dimension != NumberOfInputs)
            {
                throw new ArgumentException("Input dimension does not match this Layer.");
            }

            VectorInput = inputvalues;
            BatchInput  = null;

            List <NetworkVector> outputParts = new List <NetworkVector>();

            foreach (NetworkVector inputPart in _segment(inputvalues))
            {
                outputParts.Add(Biases.SumWith(Weights.LeftMultiply(inputPart)));
            }

            return(NetworkVector.Concatenate(outputParts));
        }
示例#6
0
        public override void Run(NetworkVector input)
        {
            if (input.Dimension != NumberOfInputs)
            {
                throw new ArgumentException("The dimension of the input does not match this WeightedCombiner.");
            }

            _input = input;

            List <NetworkVector> inputParts  = input.Segment(_bankWidth);
            List <NetworkVector> outputParts = new List <NetworkVector>();

            foreach (NetworkVector inputPart in inputParts)
            {
                _layer.Run(inputPart);
                outputParts.Add(_layer.Output);
            }
            _output = NetworkVector.Concatenate(outputParts);
        }