示例#1
0
        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;
                    }
                }
            }
        }
示例#2
0
 public RPropLearning(NeuronNet network)
 {
     Network = network;
     // reverse order
     infos = new List <LayerInfo>();
     foreach (var layer in network)
     {
         infos.Insert(0, new LayerInfo(layer));
     }
 }