public override void Update(AdaptationStrategy strategy) { Biases.Add(strategy.BiasesUpdate(_biasesGradientAccumulator)); Weights.Add(strategy.WeightsUpdate(_weightsGradientAccumulator)); _biasesGradientAccumulator.Zero(); _weightsGradientAccumulator.Zero(); }
private void CreateMatrix(int inputSize, int hiddenSize, int hiddenLayers, int outputSize) { // ?? for (int i = 0; i < hiddenLayers + 1; ++i) { int inSize = (i == 0) ? inputSize : hiddenSize; int outSize = (i == hiddenLayers) ? outputSize : hiddenSize; Weights.Add(new Matrix(inSize, outSize)); Biases.Add(new Matrix(1, outSize)); } }
private void FindBiases() { foreach (var outputSynapse in Inputs.SelectMany(i => i.Outgoing)) { Biases.Add(outputSynapse.To.BiasSynapse.From); foreach (var targetOutput in outputSynapse.To.Outgoing) { Biases.Add(targetOutput.To.BiasSynapse.From); } } }
public void Init(List <Data> trainData, List <Data> testData, int[] sizes) { TrainData = trainData; TestData = testData; Num_layers = sizes.Length; Sizes = sizes; for (int counter = 1; counter < Num_layers; counter++) { Biases.Add(np.random.randn(new int[] { Sizes[counter], 1 })); } foreach (var item in Sizes[..^ 1].Zip(Sizes[1..]))
public NNBrain(NNBrain other) { InputSize = other.InputSize; OutputSize = other.OutputSize; HiddenLayers = other.HiddenLayers; HiddenSize = other.HiddenSize; // ?? for (int i = 0; i < other.Weights.Count; ++i) { Matrix w = other.Weights[i].Copy(); Matrix b = other.Biases[i].Copy(); Weights.Add(w); Biases.Add(b); } }
public void Init(int inputsAmount, int[] neuronsInHiddenLayersAmount, int outputsAmount, Func <double, double>[] activationsFunctions) { Validate(neuronsInHiddenLayersAmount, activationsFunctions.Length, outputsAmount); ActivationsFunctions = activationsFunctions; InitHiddenLayers(inputsAmount, neuronsInHiddenLayersAmount); var weightsLastHiddenLayerToOutputLayer = new Matrix(neuronsInHiddenLayersAmount[neuronsInHiddenLayersAmount.Length - 1], outputsAmount); Weights.Add(weightsLastHiddenLayerToOutputLayer); Biases.Add(Random.Range(-1f, 1f)); GenerateWeightsValues(); }
public NeuralNetwork(ISource source, params int[] sizes) { _source = source; Sizes = sizes.ToList(); NumLayers = sizes.Length; for (var y = 1; y < sizes.Length; y++) { var newBiases = Vector <double> .Build.Random(sizes[y]); Biases.Add(newBiases); } for (int x = 0, y = 1; y < sizes.Length; y++, x++) { var newWeights = Matrix <double> .Build.Random(sizes[x], sizes[y]); Weights.Add(newWeights); } }
private void InitHiddenLayers(int inputsAmount, int[] neuronsInHiddenLayersAmount) { for (var neuronsCount = 0; neuronsCount < neuronsInHiddenLayersAmount.Length; neuronsCount++) { var hiddenLayer = new Matrix(1, neuronsInHiddenLayersAmount[neuronsCount]); HiddenLayers.Add(hiddenLayer); Biases.Add(Random.Range(-1f, 1f)); if (neuronsCount == 0) { var weightsInputToHiddenLayer1 = new Matrix(inputsAmount, neuronsInHiddenLayersAmount[neuronsCount]); Weights.Add(weightsInputToHiddenLayer1); } else { var weightsHliToNextHl = new Matrix(neuronsInHiddenLayersAmount[neuronsCount - 1], neuronsInHiddenLayersAmount[neuronsCount]); Weights.Add(weightsHliToNextHl); } } }