/// <summary> /// Tworzenie połączeń z neuronami warstwy poprzedniej i biasem a neuronem /// z warstwy kolejnej /// </summary> /// <param name="prior">neurony wartwy poprzedniej</param> /// <param name="neuron">nuron z wartwy kolejnej</param> /// <param name="bias">bias, element progowy</param> /// <returns></returns> IEnumerable<Connection> GetNeuronConnections(FirstLayerElement[] prior, Neuron neuron, Bias bias) { foreach (FirstLayerElement link in prior) yield return new Connection(link, neuron); if (bias != null) yield return new Connection(bias, neuron); }
private IEnumerable<FirstLayerElement> gather(FirstLayerElement[][] layers, Bias bias) { foreach (FirstLayerElement[] layer in layers) { foreach (FirstLayerElement link in layer) { yield return link; } } if (bias != null) { yield return bias; } yield break; }
/// <summary> /// Dokonuje pełnego połączenia dwóch wartw neuronów /// każdy z każdym /// </summary> /// <param name="prior">warstwa poprzednia</param> /// <param name="next">warstwa kolejna</param> /// <param name="bias">bias, element progowy sieci</param> public void Connect(FirstLayerElement[] prior, Neuron[] next, Bias bias) { // iterowanie neuronów warstwy kolejnej i wypełnianie pola previous foreach (Neuron neuron in next) neuron.PreviousLayer = GetNeuronConnections(prior, neuron, bias).ToArray(); int idx = 0; // iterowanie warstwy poprzedniej foreach (FirstLayerElement link in prior) link.NextLayer = GetLinkConnections(idx++, next).ToArray(); if (bias != null) { var biasConnections = GetBiasConnections(bias, next); if (bias.NextLayer == null) bias.NextLayer = new Connection[] { }; bias.NextLayer = bias.NextLayer.Concat(biasConnections).ToArray(); } }
/// <summary> /// Podłącza element progowy do warstwy neuronów /// </summary> /// <param name="bias">element progowy</param> /// <param name="next">neurony wartwy kolejnej</param> /// <returns>lista połączeń warstwy z elementem progowym</returns> IEnumerable<Connection> GetBiasConnections(Bias bias, Neuron[] next) { foreach (Neuron neuron in next) yield return neuron.PreviousLayer[neuron.PreviousLayer.Length - 1]; }
public NetworkStructure(FirstLayerElement[][] layers, Bias bias) { this.Layers = layers; this.Bias = bias; this.Elements = gather(layers, bias).ToArray(); }