示例#1
0
        public override VectorBatch InputGradient(VectorBatch outputgradients)
        {
            if (outputgradients == null || outputgradients.Dimension != NumberOfOutputs)
            {
                throw new ArgumentException("outputgradient may not be null and must have dimension equal to NumberOfNeurons.");
            }

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

            foreach (VectorBatch outputGradientPart in _segment(outputgradients))
            {
                inputGradientParts.Add(Weights.LeftMultiplyBy(outputGradientPart));
            }

            return(VectorBatch.Concatenate(inputGradientParts));
        }
示例#2
0
        protected override VectorBatch _run(VectorBatch inputbatch)
        {
            if (inputbatch.Dimension != NumberOfInputs)
            {
                throw new ArgumentException("Input dimension does not match this Layer.");
            }

            VectorInput = null;
            BatchInput  = inputbatch;

            List <VectorBatch> outputParts = new List <VectorBatch>();
            VectorBatch        result;

            foreach (VectorBatch inputPart in _segment(inputbatch))
            {
                result = Weights.TransposeAndLeftMultiplyBy(inputPart);
                result.AddVectorToEachRow(Biases);
                outputParts.Add(result);
            }

            return(VectorBatch.Concatenate(outputParts));
        }