public void PropagateSignalAfterWeightsChanged() { const int inputs = 2; var hidden = new[] { 2, 2 }; const int outputs = 2; Func<double, double> activation = x => x; var net = new SimpleFuzzyNet(inputs, hidden, () => new RealNumber(0.0), activation, outputs); var input = new List<IFuzzyNumber> { new RealNumber(1.0), new RealNumber(2.0), }; var weights = new Vector(new IFuzzyNumber[] { //output layer //first neuron new RealNumber(2.0), new RealNumber(2.0), //second neuron new RealNumber(4.0), new RealNumber(2.0), //hidden 1 new RealNumber(1.0), new RealNumber(-1.5), new RealNumber(2.0), new RealNumber(1.0), //hidden 2 new RealNumber(-1.0), new RealNumber(-1.0), new RealNumber(2.0), new RealNumber(-1.0), }); net.SetWeights(weights); var output = net.Propagate(input); var expected = new List<IFuzzyNumber> { new RealNumber(-20.0), new RealNumber(-24.0), }; int i = 0; foreach (var expectedNumber in expected) { Assert.That(output.ElementAt(i).GetMod().X, Is.EqualTo(expectedNumber.GetMod().X)); i++; } }
public void CorrectlySetWeightsVector() { const int inputs = 2; var hidden = new[] { 2, 2 }; const int outputs = 2; var net = new SimpleFuzzyNet(inputs, hidden, ()=>new RealNumber(0.0), outputNeuronsCount: outputs); var weights = new Vector(new IFuzzyNumber[] { //output layer //first neuron new RealNumber(2.0), new RealNumber(2.0), //second neuron new RealNumber(4.0), new RealNumber(2.0), //hidden 1 new RealNumber(1.0), new RealNumber(-1.5), new RealNumber(2.0), new RealNumber(1.0), //hidden 2 new RealNumber(-1.0), new RealNumber(-1.0), new RealNumber(2.0), new RealNumber(-1.0), }); //tuple: (layer, neuron, weight) var expectedWeights = new Dictionary<Tuple<int, int, int>, IFuzzyNumber>(); for (int i = 0; i < weights.Length; i++) { expectedWeights.Add(new Tuple<int, int, int>(ToLayerIndex(i), ToNeuronIndex(i), ToWeightIndex(i)), weights[i]); } net.SetWeights(weights); int l = 0; foreach (var layer in net.Layers) { layer.ForeachNeuron((i, neuron) => { neuron.ForeachWeight((j, weight) => { Assert.That(weight.Signal.GetMod().X, Is.EqualTo(expectedWeights[new Tuple<int, int, int>(l, i, j)].GetMod().X)); }); }); l++; } }