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)); }
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)); }