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); }
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)); }
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); }
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)); }
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); }
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); }
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); }