Esempio n. 1
0
    public void Rebuild()
    {
        neurons = new List<Neuron>();

        if (configuration == null)
        {
            return;
        }

        foreach (var node in configuration.nodes)
        {
            neurons.Add(convertor.ToObject(node));
        }

        System.Random random = new System.Random();

        foreach (var link in configuration.links)
        {
            var from = neurons.Find(x => x.ID == link.from);
            var to = neurons.Find(x => x.ID == link.to);

            if (from != null && to != null)
            {
                NeuronLink neuronLink = new NeuronLink(from, to, (float)random.NextDouble());

                from.out_weights.Add(neuronLink);
                to.input_weights.Add(neuronLink);
            }
            else
            {
                logger.Error($"Найдена связка несуществующих нейронов", this);
            }
        }
    }
Esempio n. 2
0
 /// <summary>
 /// Establish links to the previous layer of neurons
 /// </summary>
 /// <param name="aNeurons"> Neuron list of the previous layer</param>
 public void Link(List <Neuron> aNeurons)
 {
     inputs = new NeuronLink[aNeurons.Count];
     for (int i = 0; i < aNeurons.Count; i++)
     {
         inputs[i] = new NeuronLink {
             neuron = aNeurons[i], weight = 1f
         }
     }
     ;
 }
Esempio n. 3
0
    /// <summary>
    /// Establish links to the previous layer of neurons, copy link weights from a source
    /// </summary>
    /// <param name="aNeurons">Neuron list of the previous layer</param>
    /// <param name="aSourceWeights">list of neuron links from which we copy the weights</param>
    public void Link(List <Neuron> aNeurons, NeuronLink[] aSourceWeights)
    {
        if (aNeurons == null || aSourceWeights == null || aNeurons.Count != aSourceWeights.Length)
        {
            throw new System.ArgumentException("Duplicate of Neuron failed!");
        }
        inputs = new NeuronLink[aNeurons.Count];
        for (int i = 0; i < aNeurons.Count; i++)
        {
            inputs[i] = new NeuronLink {
                neuron = aNeurons[i], weight = aSourceWeights[i].weight
            }
        }
        ;
    }
}
        private static NeuronBackPointer[] BuildBackLinks(Neuron[] inputs, Neuron[] neurons, Neuron[] outputs, NeuronLink[] links)
        {
            List<NeuronBackPointer> retVal = new List<NeuronBackPointer>();

            // Split the list apart by To (and get all links by each To neuron)
            var neuronLinks = links.Where(o => !o.To_IsOutput).GroupBy(o => o.To_Index).ToArray();
            var outputLinks = links.Where(o => o.To_IsOutput).GroupBy(o => o.To_Index).ToArray();

            // Build return items
            foreach (var link in UtilityCore.Iterate(neuronLinks, outputLinks))
            {
                retVal.Add(new NeuronBackPointer(
                    link.First().To_IsOutput ? outputs[link.Key] : neurons[link.Key],
                    link.Select(o => o.From_IsInput ? inputs[o.From_Index] : neurons[o.From_Index]).ToArray(),
                    link.ToArray()));
            }

            // Exit Function
            return retVal.ToArray();
        }
 public NeuronBackPointer(Neuron neuron, Neuron[] inputs, NeuronLink[] links)
 {
     this.Neuron = neuron;
     this.Inputs = inputs;
     this.Links = links;
 }