public void PropagateValuesForward(List <double> networkInputsData = null, int firstLayerNoToChangeInputs = 1) { if (networkInputsData == null) { networkInputsData = Topology.NetworkInputValues(); } #region First layer Layer firstLayer = Topology.Layers.First(); firstLayer.SetInputsDataAndOutputsForFirstLayer(networkInputsData); #endregion #region Next layers for (int layerNo = firstLayerNoToChangeInputs; layerNo < Topology.Layers.Count; layerNo++) { Layer currentLayer = Topology.Layers.ElementAt(layerNo); Layer previousLayer = Topology.Layers.ElementAt(layerNo - 1); // Each neuron in current layer gets data from all neurons from previous layers and multiples it by his weight for (int neuronNo = 0; neuronNo < currentLayer.Neurons.Count; neuronNo++) { Neuron neuron = currentLayer.Neurons.ElementAt(neuronNo); // setting input values for neuron for (int inputNo = 0; inputNo < neuron.Inputs.Count; inputNo++) { neuron.Inputs.ElementAt(inputNo).Value = previousLayer.Neurons.ElementAt(inputNo).GetOutputValue(); } // let's neuron to count his output neuron.CountOutput(); } } #endregion }
public void SetInputsDataAndOutputsForFirstLayer(List <double> inputsDataForFirstLayer) { for (int neuronNo = 0; neuronNo < Neurons.Count; neuronNo++) { Neuron neuron = Neurons.ElementAt(neuronNo); neuron.Inputs.ElementAt(0).Value = inputsDataForFirstLayer.ElementAt(neuronNo); neuron.CountOutput(); } }