public static void InitNG(this IEnumerable <IGradientLayerInfo> layerInfos, NeuronNet neuronNet, Random rnd) { if (neuronNet.Count < 2) { return; } int n = neuronNet[0].Inputs.Length, p = 0; for (int index = 0; index < (neuronNet.Count - 1); index++) { p += neuronNet[index].Outputs.Length; } double beta = 0.7 * Math.Pow(p, 1.0 / n); foreach (var info in layerInfos) { var layer = info.Layer; foreach (var neuron in layer) { neuron.Bias = (2.0 * rnd.NextDouble() - 1.0) * beta; var mod = Math.Sqrt(neuron.Weights.Sum(x => x * x)); for (int i = 0; i < neuron.Weights.Length; i++) { neuron.Weights[i] = beta * neuron.Weights[i] / mod; } } } }
public RPropLearning(NeuronNet network) { Network = network; // reverse order infos = new List <LayerInfo>(); foreach (var layer in network) { infos.Insert(0, new LayerInfo(layer)); } }