public void PropagateSignal() { var levelsRight = new Dictionary<double, IntervalD> { {0.0, new IntervalD(1.0, 3.0)}, {0.5, new IntervalD(1.5, 2.5)}, {1.0, new IntervalD(2.0, 2.0)}, }; var weight = new DiscreteFuzzyNumber(levelsRight); var input = new Link(weight); var output = new Link(); var f = new Func<double, double>(x => 1.0 / (1.0 + Math.Pow(Math.E, -x))); var neuron = new FuzzyNeuron(f, () => DiscreteFuzzyNumber.GenerateLittleNumber(levelsCount: 3)); neuron.AddInput(input, weight); neuron.SetOutput(output); neuron.Propagate(); var expectedLevel00 = new IntervalD(f(1), f(9)); var expectedLevel05 = new IntervalD(f(2.25), f(6.25)); var expectedLevel10 = new IntervalD(f(4.0), f(4.0)); Assert.NotNull(output.Signal); Assert.That(output.Signal.GetAlphaLevel(0.0), Is.EqualTo(expectedLevel00)); Assert.That(output.Signal.GetAlphaLevel(0.5), Is.EqualTo(expectedLevel05)); Assert.That(output.Signal.GetAlphaLevel(1.0), Is.EqualTo(expectedLevel10)); }
public SimpleFuzzyNet(int inputNeuronsCount, int[] hiddenNeuronsCount, Func<IFuzzyNumber> littleFuzzyNumberGenerator, Func<double, double> activationFunction = null, int outputNeuronsCount = 1, int levelsCount = 100) { for (int i = 0; i < inputNeuronsCount; i++) { var inputSignal = new Link(); _inputSignals.Add(inputSignal); } for (int i = 0; i < hiddenNeuronsCount.Length; i++) { _hiddens.Add(new Layer(hiddenNeuronsCount[i], levelsCount, littleFuzzyNumberGenerator, activationFunction) {Name = "Hidden layer " + i}); } _output = new Layer(outputNeuronsCount, levelsCount, littleFuzzyNumberGenerator, activationFunction){Name = "Output layer"}; Layers = new List<ILayer>(_hiddens) {_output}; for (int i = 0; i < outputNeuronsCount; i++) { var outputSignal = new Link(); _outputSignals.Add(outputSignal); } BuildStructure(); }
public void ConnectTo(ILayer nextLayer) { _forwardLinks.Clear(); foreach (var neuron in _neurons) { var output = new Link(); _forwardLinks.Add(output); neuron.SetOutput(output); nextLayer.ForeachNeuron((i, nextNeuron) => nextNeuron.AddInput(output)); } }