Пример #1
0
        private InferenceLayer <LinearMembershipFunction> Create()
        {
            var lrate = 1e-2;
            var smoothingAvarageRate = 1e-3;

            var ruleset = new FirstLevelRuleset(5e-1);

            var termLayer1 = new TermLayer <LinearMembershipFunction>(learningRate: lrate,
                                                                      smoothingAverageRate: smoothingAvarageRate,
                                                                      termsLimit: 8, competitionLooseLimit: 500);
            var termLayer2 = new TermLayer <LinearMembershipFunction>(learningRate: lrate,
                                                                      smoothingAverageRate: smoothingAvarageRate,
                                                                      termsLimit: 12, competitionLooseLimit: 500);
            var termLayer3 = new TermLayer <LinearMembershipFunction>(learningRate: lrate,
                                                                      smoothingAverageRate: smoothingAvarageRate,
                                                                      termsLimit: 18, competitionLooseLimit: 500);
            var termLayer4 = new TermLayer <LinearMembershipFunction>(learningRate: lrate,
                                                                      smoothingAverageRate: smoothingAvarageRate,
                                                                      termsLimit: 30, competitionLooseLimit: 500);
            var fis = new InferenceLayer <LinearMembershipFunction>(
                new[] { termLayer1, termLayer2, termLayer3, termLayer4 },
                ruleset, smoothingAvarageRate);

            return(fis);
        }
Пример #2
0
        public void CreationStep_InitialInfinities(double input)
        {
            var layers = new TermLayer <LinearMembershipFunction>();

            layers.CreationStep(input, 0, 0);

            Assert.AreEqual(3, layers.Cores.Length);
            Assert.IsTrue(layers.Cores.Any(z => Math.Abs(z.X - input) < 1e-5));
        }
Пример #3
0
        private InferenceLayer <PiMembershipFunction> Create()
        {
            var lrate = 1e-3;
            var smoothingAvarageRate = 1e-3;

            var ruleset = new FirstLevelRuleset(2e-1);

            var termLayer = new TermLayer <PiMembershipFunction>(learningRate: lrate,
                                                                 smoothingAverageRate: smoothingAvarageRate,
                                                                 termsLimit: 200, competitionLooseLimit: 100); //TermCore.Create(0), TermCore.Create(1)
            var fis = new InferenceLayer <PiMembershipFunction>(new[] { termLayer }, ruleset, smoothingAvarageRate);

            return(fis);
        }
Пример #4
0
        public void CreationStep_CorrectlyOutsideTerm(double input)
        {
            var zero = TermCore.Create(0);
            var one  = TermCore.Create(1);

            zero.AccumulatedError = 1;
            one.AccumulatedError  = 1;
            var layers = new TermLayer <LinearMembershipFunction>(new[]
            {
                zero, one
            });

            layers.CreationStep(input, 0, 0);

            Assert.AreEqual(5, layers.Cores.Length);
            Assert.IsTrue(layers.Cores.Any(z => Math.Abs(z.X - input) < 1e-5));
        }
Пример #5
0
        public void CreationStep_CorrectlyCreatedMidleTerm(double input)
        {
            var zero = TermCore.Create(0);
            var one  = TermCore.Create(1);

            zero.AccumulatedError = 1;
            one.AccumulatedError  = 1;
            var layers = new TermLayer <LinearMembershipFunction>(new[]
            {
                zero, one
            });

            layers.CreationStep(input, 0, 0);

            Assert.AreEqual(5, layers.Cores.Length);
            Assert.AreEqual(input, layers.Cores[2].X);
        }
Пример #6
0
        public void BackpropError_AccumulatedErrorComputedCorrectly()
        {
            var zero   = TermCore.Create(0);
            var one    = TermCore.Create(1);
            var layers = new TermLayer <LinearMembershipFunction>(new[]
            {
                zero, one
            }, learningRate: 1e-1, smoothingAverageRate: 1e-1);

            for (var i = 0; i < 100; i++)
            {
                layers.BackpropError(0, 5);
                layers.BackpropError(1, -3);
            }

            Assert.AreEqual(5, zero.AccumulatedError, 1e-2);
            Assert.AreEqual(-3, one.AccumulatedError, 1e-2);
        }
Пример #7
0
        public void BackpropError_CoresLearnedCorrectly(double initialZero, double initialOne)
        {
            var zero   = TermCore.Create(initialZero);
            var one    = TermCore.Create(initialOne);
            var layers = new TermLayer <LinearMembershipFunction>(new[]
            {
                zero, one
            }, learningRate: 1e-1);

            for (var i = 0; i < 100; i++)
            {
                layers.BackpropError(0, -zero.X);
                layers.BackpropError(1, 1.0 - one.X);
            }

            Assert.AreEqual(0, zero.X, 1e-2);
            Assert.AreEqual(1, one.X, 1e-2);
        }