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); } } }
/// <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 } } ; }
/// <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; }