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