public void Learn(INeuralNetwork net, ILearningSequence<ISupervisedLearningVector> seq) { LearningStory = new List<NeuronState>(); bool isLearned = true; do { StoreState(net); isLearned = true; IEnumerator<ISupervisedLearningVector> en = seq.Vectors.GetEnumerator(); while (en.MoveNext()) { net.SetInput(en.Current.Data); net.Compute(); double delta = en.Current.CorrectOutput - net[0]; if (delta != 0.0) { isLearned = false; CorrectWeights(net, delta > 0 ? 1.0 : -1.0); } } seq.Shuffle(); } while (!isLearned); StoreState(net); }
public void Learn(INeuralNetwork net, ILearningSequence<ISupervisedLearningVector> seq) { LearningStory = new List<NeuronState>(); bool isLearned = true; int counter = 0; do { StoreState(net); isLearned = true; IEnumerator<ISupervisedLearningVector> en = seq.Vectors.GetEnumerator(); while (en.MoveNext()) { net.SetInput(en.Current.Data); net.Compute(); CorrectWeights(net, en.Current.CorrectOutput - net.Layers[1][0].Potential); } en.Reset(); while (en.MoveNext()) { net.SetInput(en.Current.Data); net.Compute(); if (Math.Abs(en.Current.CorrectOutput - net[0]) > Epsilon) { isLearned = false; break; } } seq.Shuffle(); counter++; } while (!isLearned && counter < EpochLimit); StoreState(net); Failed = !isLearned; }
private void Form1_Load(object sender, EventArgs e) { learningSequence = new LearningSequence<ISupervisedLearningVector>(); learningSequenceDT = new DataTable(); dataGridView1.AutoGenerateColumns = true; dataGridView1.DataSource = learningSequenceDT; }
private void listBox1_SelectedIndexChanged_1(object sender, EventArgs e) { switch (listBox1.SelectedIndex) { case 0: learningSequence = new LearningSequence<ISupervisedLearningVector>(); learningSequence.Add(new SupervisedLearningVector(new double[2] { -1, -1 }, -1)); learningSequence.Add(new SupervisedLearningVector(new double[2] { 1, -1 }, -1)); learningSequence.Add(new SupervisedLearningVector(new double[2] { -1, 1 }, -1)); learningSequence.Add(new SupervisedLearningVector(new double[2] { 1, 1 }, 1)); UpdateLearningSequenceDT(); break; case 1: learningSequence = new LearningSequence<ISupervisedLearningVector>(); learningSequence.Add(new SupervisedLearningVector(new double[2] { -1, -1 }, -1)); learningSequence.Add(new SupervisedLearningVector(new double[2] { 1, -1 }, 1)); learningSequence.Add(new SupervisedLearningVector(new double[2] { -1, 1 }, 1)); learningSequence.Add(new SupervisedLearningVector(new double[2] { 1, 1 }, 1)); UpdateLearningSequenceDT(); break; case 2: learningSequence = new LearningSequence<ISupervisedLearningVector>(); learningSequence.Add(new SupervisedLearningVector(new double[2] { 0, 0 }, 0)); learningSequence.Add(new SupervisedLearningVector(new double[2] { 1, 0 }, 0)); learningSequence.Add(new SupervisedLearningVector(new double[2] { 0, 1 }, 0)); learningSequence.Add(new SupervisedLearningVector(new double[2] { 1, 1 }, 1)); UpdateLearningSequenceDT(); break; case 3: learningSequence = new LearningSequence<ISupervisedLearningVector>(); learningSequence.Add(new SupervisedLearningVector(new double[2] { 0, 0 }, 0)); learningSequence.Add(new SupervisedLearningVector(new double[2] { 1, 0 }, 1)); learningSequence.Add(new SupervisedLearningVector(new double[2] { 0, 1 }, 1)); learningSequence.Add(new SupervisedLearningVector(new double[2] { 1, 1 }, 1)); UpdateLearningSequenceDT(); break; } }