/// <summary> /// Randomizes all weights. /// </summary> public void RandomizeWeights() { foreach (var layer in Weights) { foreach (var neuron in layer) { for (var input = 0; input < neuron.Length; input++) { neuron[input] = BruteOptimizer.GetRandomNumber(-10, 10); } } } }
/// <summary> /// Addes a bias neuron to the specified layer /// </summary> /// <param name="layer">The layer to add the bias neuron to, starting with input layer = 0</param> public void AddBiasNeuron(int layer) { layer++; //Adding the bias neuron to layer L means adding extra weights to each neuron in layer L+1 for (var neuron = 0; neuron < Weights[layer].Length; neuron++) { var newWeights = new double[Weights[layer][neuron].Length + 1]; Weights[layer][neuron].CopyTo(newWeights, 0); newWeights[Weights[layer][neuron].Length] = BruteOptimizer.GetRandomNumber(-10, 10); Weights[layer][neuron] = newWeights; } }
/// <summary> /// Initializes the weights to random values between -10 and 10 /// </summary> /// <param name="inputs">The number of input neurons</param> /// <param name="innerLayers">The number of hidden inner layers (not input or output)</param> /// <param name="neuronsPerLayer">The number of neurons per hidden inner layer</param> /// <param name="outputNeurons">The number of output neurons</param> public void InitializeWeights(int inputs, int innerLayers, int neuronsPerLayer, int outputNeurons) { Weights = new double[innerLayers + 1][][]; Weights[0] = new double[neuronsPerLayer][]; for (var neuronIndex = 0; neuronIndex < neuronsPerLayer; neuronIndex++) { Weights[0][neuronIndex] = new double[inputs]; for (var i = 0; i < inputs; i++) { Weights[0][neuronIndex][i] = BruteOptimizer.GetRandomNumber(-10, 10); } } for (var layerIndex = 1; layerIndex < innerLayers; layerIndex++) { Weights[layerIndex] = new double[neuronsPerLayer][]; for (var neuronIndex = 0; neuronIndex < neuronsPerLayer; neuronIndex++) { Weights[layerIndex][neuronIndex] = new double[neuronsPerLayer]; for (var i = 0; i < neuronsPerLayer; i++) { Weights[layerIndex][neuronIndex][i] = BruteOptimizer.GetRandomNumber(-10, 10); } } } Weights[innerLayers] = new double[outputNeurons][]; for (var neuronIndex = 0; neuronIndex < outputNeurons; neuronIndex++) { Weights[innerLayers][neuronIndex] = new double[neuronsPerLayer]; for (var i = 0; i < neuronsPerLayer; i++) { Weights[innerLayers][neuronIndex][i] = BruteOptimizer.GetRandomNumber(-10, 10); } } }