Beispiel #1
0
        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));
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
 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));
     }
 }