/// <summary> /// 点击计算按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmiCalculate_Click(object sender, EventArgs e) { // 创建输入层、隐层和输出层 ActivationLayer inputLayer = GetLayer(cboInputLayerType.SelectedItem.ToString(), 2); ActivationLayer hiddenLayer = GetLayer(cboHiddenLayerType.SelectedItem.ToString(), int.Parse(txtHiddenLayerCount.Text)); ActivationLayer outputLayer = GetLayer(cboOutputLayerType.SelectedItem.ToString(), 1); // 创建层之间的关联 new BackpropagationConnector(inputLayer, hiddenLayer, ConnectionMode.Complete).Initializer = new RandomFunction(0, 0.3); new BackpropagationConnector(hiddenLayer, outputLayer, ConnectionMode.Complete).Initializer = new RandomFunction(0, 0.3); // 创建神经网络 var network = new BackpropagationNetwork(inputLayer, outputLayer); network.SetLearningRate(double.Parse(txtInitialLearningRate.Text), double.Parse(txtFinalLearningRate.Text)); // 进行训练 var trainingSet = new TrainingSet(2, 1); for (var i = 0; i < 17; i++) { var x1 = data[i, 0]; var x2 = data[i, 1]; var y = data[i, 2]; var inputVector = new double[] { x1, x2 }; var outputVector = new double[] { y }; var trainingSample = new TrainingSample(inputVector, outputVector); trainingSet.Add(trainingSample); } network.SetLearningRate(0.3, 0.1); network.Learn(trainingSet, int.Parse(txtTrainingEpochs.Text)); network.StopLearning(); // 进行预测 for (var i = 0; i < 17; i++) { var x1 = data[i, 0]; var x2 = data[i, 1]; var y = data[i, 2]; var testInput = new double[] { x1, x2 }; var testOutput = network.Run(testInput)[0]; var absolute = testOutput - y; var relative = Math.Abs((testOutput - y) / testOutput); dgvData.Rows[i].Cells[3].Value = testOutput.ToString("f3"); dgvData.Rows[i].Cells[4].Value = absolute.ToString("f3"); dgvData.Rows[i].Cells[5].Value = (relative * 100).ToString("f1") + "%"; } }
public override void Train(IForecastingDataSets datasets) { OnStartRunning(new ComponentRunEventArgs(datasets)); AnnModelParameter para = mParameter as AnnModelParameter; LinearLayer inputLayer = new LinearLayer(datasets.InputData[0].Length); SigmoidLayer hiddenLayer = new SigmoidLayer(para.HiddenNeuronsCount[0]); SigmoidLayer outputLayer = new SigmoidLayer(1); new BackpropagationConnector(inputLayer, hiddenLayer).Initializer = new RandomFunction(0d, 0.3d); new BackpropagationConnector(hiddenLayer, outputLayer).Initializer = new RandomFunction(0d, 0.3d); network = new BackpropagationNetwork(inputLayer, outputLayer); network.SetLearningRate(para.LearningRate); network.JitterEpoch = para.JitterEpoch; network.JitterNoiseLimit = para.JitterNoiseLimit; network.EndEpochEvent += new TrainingEpochEventHandler( delegate(object senderNetwork, TrainingEpochEventArgs args) { // TODO: trainning error needs to be calculated OnRunningEpoch(new AnnModelRunEpochEventArgs(args.TrainingIteration + 1, 0)); }); network.Learn(ForecastingDataSets.ConvertToTrainingSet(datasets), para.Iterations); datasets.ForecastedData = new double[datasets.InputData.Length][]; for (int i = 0; i < datasets.InputData.Length; i++) { datasets.ForecastedData[i] = new double[1]; datasets.ForecastedData[i][0] = Forecast(datasets.InputData[i]); } OnFinishRunning(new ComponentRunEventArgs(datasets)); }
public void LabTest1() { var inputLayer = new LinearLayer(5); var hiddenLayer = new TanhLayer(neuronCount); var outputLayer = new TanhLayer(2); new BackpropagationConnector(inputLayer, hiddenLayer); new BackpropagationConnector(hiddenLayer, outputLayer); _xorNetwork = new BackpropagationNetwork(inputLayer, outputLayer); _xorNetwork.SetLearningRate(learningRate); var trainingSet = new TrainingSet(5, 2); trainingSet.Add(new TrainingSample(new double[] { 0, 0, 0, 0, 0 }, new double[] { 0, 0 })); trainingSet.Add(new TrainingSample(new double[] { 0, 0, 0, 1, 0 }, new double[] { 3, 3 })); trainingSet.Add(new TrainingSample(new double[] { 0, 0, 1, 0, 0 }, new double[] { 2, 2 })); trainingSet.Add(new TrainingSample(new double[] { 0, 0, 1, 1, 0 }, new double[] { 2, 3 })); trainingSet.Add(new TrainingSample(new double[] { 0, 1, 0, 0, 0 }, new double[] { 1, 1 })); trainingSet.Add(new TrainingSample(new double[] { 0, 1, 0, 1, 0 }, new double[] { 1, 3 })); trainingSet.Add(new TrainingSample(new double[] { 0, 1, 1, 0, 0 }, new double[] { 1, 2 })); trainingSet.Add(new TrainingSample(new double[] { 0, 1, 1, 1, 0 }, new double[] { 1, 3 })); trainingSet.Add(new TrainingSample(new double[] { 22, 1, 1, 1, 22 }, new double[] { 1, 3 })); _errorList = new double[cycles]; //_xorNetwork.EndEpochEvent += EndEpochEvent; _xorNetwork.Learn(trainingSet, cycles); var result = _xorNetwork.Run(new double[] { 0, 0, 1, 1, 0 }); }
public BackpropagationNetwork network(int trainInVectorDimension, int trainOutVectorDimension) { this.hiddenLayerList = HiddenLayerList(); ActivationLayer inputLayer = new LinearLayer(trainInVectorDimension); ActivationLayer outputLayer = new SigmoidLayer(trainOutVectorDimension); BackpropagationConnector bpc0 = new BackpropagationConnector(inputLayer, this.hiddenLayerList[0]); for (int i = 1; i < this.hiddenLayerList.Count; i++) { bpc0 = new BackpropagationConnector(this.hiddenLayerList[i - 1], this.hiddenLayerList[i]); } bpc0 = new BackpropagationConnector(this.hiddenLayerList[this.hiddenLayerList.Count - 1], outputLayer); BackpropagationNetwork network = new BackpropagationNetwork(inputLayer, outputLayer); /*ActivationLayer inputLayer = hiddenLayerList[0]; * ActivationLayer outputLayer = hiddenLayerList[hiddenLayerList.Count - 1]; * * if(hiddenLayerList.Count != 2) * { * BackpropagationConnector bpc0 = new BackpropagationConnector(inputLayer, this.hiddenLayerList[1]); * for (int i = 2; i < this.hiddenLayerList.Count - 1; i++) * { * bpc0 = new BackpropagationConnector(this.hiddenLayerList[i - 1], this.hiddenLayerList[i]); * } * bpc0 = new BackpropagationConnector(this.hiddenLayerList[this.hiddenLayerList.Count - 2], outputLayer); * } * * BackpropagationNetwork network = new BackpropagationNetwork(inputLayer, outputLayer);*/ network.SetLearningRate(this.learningRate); return(network); }
private void button37_Click(object sender, EventArgs e) { TrainingSet egitimseti = new TrainingSet(35, 5); egitimseti.Add(new TrainingSample(VeriSeti.A, new double[5] { 1, 0, 0, 0, 0 })); egitimseti.Add(new TrainingSample(VeriSeti.A1, new double[5] { 1, 0, 0, 0, 0 })); egitimseti.Add(new TrainingSample(VeriSeti.B, new double[5] { 0, 1, 0, 0, 0 })); egitimseti.Add(new TrainingSample(VeriSeti.C, new double[5] { 0, 0, 1, 0, 0 })); egitimseti.Add(new TrainingSample(VeriSeti.D, new double[5] { 0, 0, 0, 1, 0 })); egitimseti.Add(new TrainingSample(VeriSeti.E, new double[5] { 0, 0, 0, 0, 1 })); ag.SetLearningRate(Convert.ToDouble(txt_ogrenmekatsayisi.Text)); ag.Learn(egitimseti, Convert.ToInt32(txt_ogrenmehizi.Text)); txt_ogrenmekatsayisi.Enabled = false; txt_ogrenmehizi.Enabled = false; lbl_hata.Text = ag.MeanSquaredError.ToString(); button37.Enabled = false; MessageBox.Show("Yapay Sinir Ağı Eğitildi.", "Bilgi"); }
void CreateNewNetwork() { LinearLayer inputLayer = new LinearLayer(neurons); SigmoidLayer hiddenLayer = new SigmoidLayer(hidden1Neurons); SigmoidLayer hiddenLayer2 = new SigmoidLayer(hidden2Neurons); LinearLayer outputLayer = new LinearLayer(outputNum); BackpropagationConnector conn1 = new BackpropagationConnector(inputLayer, hiddenLayer); conn1.Initializer = new RandomFunction(0d, 0.001d); BackpropagationConnector conn3 = new BackpropagationConnector(hiddenLayer, hiddenLayer2); conn3.Initializer = new RandomFunction(0d, 0.001d); BackpropagationConnector conn2 = new BackpropagationConnector(hiddenLayer2, outputLayer); conn2.Initializer = new RandomFunction(0d, 0.001d); conn1.Initialize(); conn2.Initialize(); conn3.Initialize(); neuralNetwork = new BackpropagationNetwork(inputLayer, outputLayer); neuralNetwork.SetLearningRate(learningRate); neuralNetwork.Initialize(); }
public Imagine(int w, int h) { W = w; H = h; Inputs = W * H * 3; iLay = new LinearLayer(Inputs); hLay = new SigmoidLayer(neuronCount); oLay = new SigmoidLayer(w * h * 3); c1 = new BackpropagationConnector(iLay, hLay, ConnectionMode.Complete); c2 = new BackpropagationConnector(hLay, oLay, ConnectionMode.Complete); net = new BackpropagationNetwork(iLay, oLay); net.SetLearningRate(learningRate); }
public void initNet(int fLayer, int sLayer, int tLayer) { ActivationLayer inputLayer = createLayer(fLayer, inputNeurons); ActivationLayer hiddenLayer = createLayer(sLayer, hiddenNeurons); ActivationLayer outputLayer = createLayer(tLayer, outputNeurons); //var hiddenLayer = new LinearLayer(hiddenNeurons); //var outputLayer = new LinearLayer(outputNeurons); new BackpropagationConnector(inputLayer, hiddenLayer).Initializer = new RandomFunction(0d, 0.3d); new BackpropagationConnector(hiddenLayer, outputLayer).Initializer = new RandomFunction(0d, 0.3d); network = new BackpropagationNetwork(inputLayer, outputLayer); network.SetLearningRate(learningRate); SampleInput = new double[inputNeurons + outputNeurons]; SampleOutput = new double[outputNeurons]; }
// train butonu private void btnTrain_Click(object sender, EventArgs e) { TrainingSet trainingSet = new TrainingSet(35, 5); trainingSet.Add(new TrainingSample(Dataset.Letters.A, new double[5] { 1, 0, 0, 0, 0 })); trainingSet.Add(new TrainingSample(Dataset.Letters.B, new double[5] { 0, 1, 0, 0, 0 })); trainingSet.Add(new TrainingSample(Dataset.Letters.C, new double[5] { 0, 0, 1, 0, 0 })); trainingSet.Add(new TrainingSample(Dataset.Letters.D, new double[5] { 0, 0, 0, 1, 0 })); trainingSet.Add(new TrainingSample(Dataset.Letters.E, new double[5] { 0, 0, 0, 0, 1 })); neuralNetwork.SetLearningRate(Convert.ToDouble(0.3)); neuralNetwork.Learn(trainingSet, Convert.ToInt32(5000)); btnTrain.Enabled = false; btnGetResults.Enabled = true; }
private void Start(object sender, EventArgs e) { CleanseGraph(); EnableControls(false); curve.Color = enabledColor; if (!int.TryParse(txtCycles.Text, out cycles)) { cycles = 10000; } if (!double.TryParse(txtLearningRate.Text, out learningRate)) { learningRate = 0.25d; } if (!int.TryParse(txtNeuronCount.Text, out neuronCount)) { neuronCount = 10; } if (cycles <= 0) { cycles = 10000; } if (learningRate < 0 || learningRate > 1) { learningRate = 0.25d; } if (neuronCount <= 0) { neuronCount = 10; } txtCycles.Text = cycles.ToString(); txtLearningRate.Text = learningRate.ToString(); txtNeuronCount.Text = neuronCount.ToString(); LinearLayer inputLayer = new LinearLayer(1); SigmoidLayer hiddenLayer = new SigmoidLayer(neuronCount); SigmoidLayer outputLayer = new SigmoidLayer(1); new BackpropagationConnector(inputLayer, hiddenLayer).Initializer = new RandomFunction(0d, 0.3d); new BackpropagationConnector(hiddenLayer, outputLayer).Initializer = new RandomFunction(0d, 0.3d); network = new BackpropagationNetwork(inputLayer, outputLayer); network.SetLearningRate(learningRate); TrainingSet trainingSet = new TrainingSet(1, 1); for (int i = 0; i < curve.Points.Count; i++) { double xVal = curve.Points[i].X; for (double input = xVal - 0.05; input < xVal + 0.06; input += 0.01) { trainingSet.Add(new TrainingSample(new double[] { input }, new double[] { curve.Points[i].Y })); } } network.EndEpochEvent += new TrainingEpochEventHandler( delegate(object senderNetwork, TrainingEpochEventArgs args) { trainingProgressBar.Value = (int)(args.TrainingIteration * 100d / cycles); Application.DoEvents(); }); network.Learn(trainingSet, cycles); StopLearning(this, EventArgs.Empty); }
/// <summary> /// This constructs a training procedure for standard backpropagation techniques. /// More advanced ones will be used as seen in the example. /// </summary> /// <param name="writer"></param> public TestingNdn(StreamWriter writer) { TrainingSample sample = new TrainingSample( new double[] { }, new double[] { }); //We might make a gui for this later. int numberOfNeurons = 3; double learningRate = 0.5; int numberOfCycles = 10000; double[] errorList = new double[numberOfCycles]; LinearLayer inputLayer = new LinearLayer(2); SigmoidLayer hiddenLayer = new SigmoidLayer(numberOfNeurons); SigmoidLayer outputLayer = new SigmoidLayer(1); // This layer is a event handler that fires when the output is generated, hence backpropagation. BackpropagationConnector conn1 = new BackpropagationConnector(inputLayer, hiddenLayer); BackpropagationConnector conn2 = new BackpropagationConnector(hiddenLayer, outputLayer); BackpropagationNetwork network = new BackpropagationNetwork(inputLayer, outputLayer); network.SetLearningRate(learningRate); TrainingSet trainingSet = new TrainingSet(2, 1); trainingSet.Add(new TrainingSample(new double[2] { 0, 0 }, new double[1] { 0 })); trainingSet.Add(new TrainingSample(new double[2] { 0, 1 }, new double[1] { 1 })); trainingSet.Add(new TrainingSample(new double[2] { 1, 0 }, new double[1] { 1 })); trainingSet.Add(new TrainingSample(new double[2] { 1, 1 }, new double[1] { 0 })); double max = 0; // create an anonymous function to capture the error value of each iteration, and report back the percent of completion. network.EndEpochEvent += delegate(object networkInput, TrainingEpochEventArgs args) { errorList[args.TrainingIteration] = network.MeanSquaredError; max = Math.Max(max, network.MeanSquaredError); PercentComplete = args.TrainingIteration * 100 / numberOfCycles; }; network.Learn(trainingSet, numberOfCycles); double[] indices = new double[numberOfCycles]; // for (int i = 0; i < numberOfCycles; i++) { indices[i] = i; } .. oh nvm, its for graphing the learning curve // what to do for error list? // errorList => for plotting stuff. for (int i = 0; i < numberOfCycles; i++) { //Console.WriteLine(errorList[i]); } double[] outputResult = network.OutputLayer.GetOutput(); Console.WriteLine("final output"); double[] r1 = new double[] { 0, 0 }; double[] r2 = new double[] { 0, 1 }; double[] r3 = new double[] { 1, 0 }; double[] r4 = new double[] { 1, 1 }; Console.WriteLine(" 0 0 => " + network.Run(r1)[0]); Console.WriteLine(" 0 1 => " + network.Run(r2)[0]); Console.WriteLine(" 1 0 => " + network.Run(r3)[0]); Console.WriteLine(" 1 1 => " + network.Run(r4)[0]); }
private void buttonOK_Click(object sender, EventArgs e) { this.Cursor = Cursors.WaitCursor; try { // // 解析数据文件 // int inputCount = 0; int outputCount = 1; if (textInputCount.Text.Length > 0) { inputCount = int.Parse(textInputCount.Text); } if (textOutputCount.Text.Length > 0) { outputCount = int.Parse(textOutputCount.Text); } TrainingSet trainingSet = DataFile.CsvFileToTrainingSet(textTrainingSet.Text, ref inputCount, ref outputCount); TrainingSet crossvalidSet = null; if (textCvSet.Text.Length > 0) { crossvalidSet = DataFile.CsvFileToTrainingSet(textCvSet.Text, ref inputCount, ref outputCount); } // // 创建新网络 // // 输入层始终与输入计数是线性关系 LinearLayer inputLayer = new LinearLayer(inputCount); // 创建隐层 ActivationLayer hiddenLayer1 = null; ActivationLayer hiddenLayer2 = null; ActivationLayer outputLayer = null; if (comboActFunction1.SelectedIndex < 0) { MessageBox.Show("请选择激活函数!"); return; } switch ((HiddenLayerType)comboActFunction1.SelectedItem) { case HiddenLayerType.Linear: hiddenLayer1 = new LinearLayer(int.Parse(textNeuronCount1.Text)); break; case HiddenLayerType.Logarithmic: hiddenLayer1 = new LogarithmLayer(int.Parse(textNeuronCount1.Text)); break; case HiddenLayerType.Sigmoid: hiddenLayer1 = new SigmoidLayer(int.Parse(textNeuronCount1.Text)); break; case HiddenLayerType.Sine: hiddenLayer1 = new SineLayer(int.Parse(textNeuronCount1.Text)); break; case HiddenLayerType.Tanh: hiddenLayer1 = new TanhLayer(int.Parse(textNeuronCount1.Text)); break; } if (textNeuronCount2.Text.Length > 0 && int.Parse(textNeuronCount2.Text) > 0) { switch ((HiddenLayerType)comboActFunction2.SelectedItem) { case HiddenLayerType.Linear: hiddenLayer2 = new LinearLayer(int.Parse(textNeuronCount2.Text)); break; case HiddenLayerType.Logarithmic: hiddenLayer2 = new LogarithmLayer(int.Parse(textNeuronCount2.Text)); break; case HiddenLayerType.Sigmoid: hiddenLayer2 = new SigmoidLayer(int.Parse(textNeuronCount2.Text)); break; case HiddenLayerType.Sine: hiddenLayer2 = new SineLayer(int.Parse(textNeuronCount2.Text)); break; case HiddenLayerType.Tanh: hiddenLayer2 = new TanhLayer(int.Parse(textNeuronCount2.Text)); break; } } if (comboOutputFunction.SelectedIndex < 0) { MessageBox.Show("请选择输出函数!"); return; } switch ((HiddenLayerType)comboOutputFunction.SelectedItem) { case HiddenLayerType.Linear: outputLayer = new LinearLayer(outputCount); break; case HiddenLayerType.Logarithmic: outputLayer = new LogarithmLayer(outputCount); break; case HiddenLayerType.Sigmoid: outputLayer = new SigmoidLayer(outputCount); break; case HiddenLayerType.Sine: outputLayer = new SineLayer(outputCount); break; case HiddenLayerType.Tanh: outputLayer = new TanhLayer(outputCount); break; } // 连接层, hidden2是可选的 new BackpropagationConnector(inputLayer, hiddenLayer1); if (hiddenLayer2 != null) { new BackpropagationConnector(hiddenLayer1, hiddenLayer2); new BackpropagationConnector(hiddenLayer2, outputLayer); } else { new BackpropagationConnector(hiddenLayer1, outputLayer); } BackpropagationNetwork backpropNetwork = new BackpropagationNetwork(inputLayer, outputLayer); // // 设置学习和退出参数 // double startLearningRate = double.Parse(textStartLearningRate.Text); double?finalLearningRate = null; if (textFinalLearningRate.Text.Length > 0) { finalLearningRate = double.Parse(textFinalLearningRate.Text); } // 如果选择了学习率函数则使用 LearningRateFunction?lrf = null; if (comboLRFunction.SelectedIndex > 0) { lrf = (LearningRateFunction)comboLRFunction.SelectedItem; backpropNetwork.SetLearningRate( LearningRateFactory.GetLearningRateFunction(lrf.Value, startLearningRate, finalLearningRate.Value)); } else { // 否则使用普通学习率,也许有起点和终点 if (finalLearningRate.HasValue) { backpropNetwork.SetLearningRate(startLearningRate, finalLearningRate.Value); } else { backpropNetwork.SetLearningRate(startLearningRate); } } // 如果给定,在连接器中设置动量 double?momentum = null; if (textMomentum.Text.Length > 0) { momentum = double.Parse(textMomentum.Text); foreach (ILayer layer in backpropNetwork.Layers) { foreach (BackpropagationConnector conn in layer.SourceConnectors) { conn.Momentum = momentum.Value; } foreach (BackpropagationConnector conn in layer.TargetConnectors) { conn.Momentum = momentum.Value; } } } // // 新建工程和保存工程 // int tmpInt; NewProject = new NnProject(); NewProject.Network = backpropNetwork; // 确保为新网络初始化权重,默认情况下新的训练周期将不会初始化 NewProject.Network.Initialize(); NewProject.ProjectName = textProjectName.Text.Trim(); NewProject.SaveFolder = textSaveFolder.Text; NewProject.TrainingSet = trainingSet; NewProject.CrossValidationSet = crossvalidSet; NewProject.LearningParameters = new NnProject.NnLearningParameters(); NewProject.LearningParameters.InitialLearningRate = startLearningRate; NewProject.LearningParameters.FinalLearningRate = finalLearningRate; NewProject.LearningParameters.LearningRateFunction = lrf; NewProject.LearningParameters.Momentum = momentum; if (int.TryParse(textTrainingCycles.Text, out tmpInt)) { NewProject.LearningParameters.MaxTrainingCycles = tmpInt; } NnProject.Save(NewProject, textSaveFolder.Text); this.Close(); } catch (Exception ex) { this.Cursor = Cursors.Default; MessageBox.Show("Error creating network - " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { this.Cursor = Cursors.Default; } }
/// <summary> /// Created this to test the custom neuron network with binary inputs. /// </summary> /// <param name="writer"></param> public static void Test( string file, int numberOfInputNeurons, int numberOfHiddenNeurons, int numberOfOutputNeurons, int numberOfCycles = 50000, double learningRate = 0.25) { TrainingSample sample = new TrainingSample( new double[] { }, new double[] { }); //We might make a gui for this later. double[] errorList = new double[numberOfCycles]; int totalNumberOfNeurons = numberOfInputNeurons + numberOfOutputNeurons; LinearLayer inputLayer = new LinearLayer(numberOfInputNeurons); SigmoidLayer hiddenLayer = new SigmoidLayer(numberOfHiddenNeurons); SigmoidLayer outputLayer = new SigmoidLayer(numberOfOutputNeurons); // This layer is a event handler that fires when the output is generated, hence backpropagation. BackpropagationConnector conn1 = new BackpropagationConnector(inputLayer, hiddenLayer); BackpropagationConnector conn2 = new BackpropagationConnector(hiddenLayer, outputLayer); BackpropagationNetwork network = new BackpropagationNetwork(inputLayer, outputLayer); network.SetLearningRate(learningRate); TrainingSet trainingSet = new TrainingSet(10, 8); // A file stream reader. var inDefaule = Console.In; using (StreamReader reader = new StreamReader(file)) { Console.SetIn(reader); String line = ""; //trainingSet.Add(new TrainingSample(new double[] { 0, 0, 0, 0, 1 }, new double[1] { 1 })); while ((line = reader.ReadLine()) != null) { String[] array = line.Split(','); double[] inputArray = new double[10]; double[] outputArray = new double[8]; for (int i = 0; i < 10; i++) { inputArray[i] = Convert.ToDouble(array[i]); } for (int i = 0; i < 8; i++) { outputArray[i] = Convert.ToDouble(array[i + 11]); } trainingSet.Add(new TrainingSample(inputArray, outputArray)); } } double max = 0; // create an anonymous function to capture the error value of each iteration, and report back the percent of completion. network.EndEpochEvent += delegate(object networkInput, TrainingEpochEventArgs args) { errorList[args.TrainingIteration] = network.MeanSquaredError; max = Math.Max(max, network.MeanSquaredError); // PercentComplete = args.TrainingIteration * 100 / numberOfCycles; }; network.Learn(trainingSet, numberOfCycles); double[] indices = new double[numberOfCycles]; // for (int i = 0; i < numberOfCycles; i++) { indices[i] = i; } .. oh nvm, its for graphing the learning curve // what to do for error list? // errorList => for plotting stuff. // for (int i = 0; i < numberOfCycles; i++) // { //Console.WriteLine(errorList[i]); // } // print out the error list for scientific evaluation. StreamUtilities.DumpData("dumpErrorValues.txt", errorList); double[] outputResult = network.OutputLayer.GetOutput(); outputResult = network.Run(new double[] { 0.47, 0.41, 0.12, 0.05, 0.1, 0.5, 0.1, 0.1, 0.05, 0.1 }); foreach (var d in outputResult) { Console.WriteLine("output: " + d); } // Console.WriteLine("final output"); }