public void DrawChart(TrainingResult trainResult) { if (_xyLineChart == null) return; //TrainingRate ChartPrimitive line0 = _xyLineChart.Primitives[0]; line0.AddPoint(trainResult.Epoch,trainResult.TrainingRate*1000); ChartPrimitive line1 = _xyLineChart.Primitives[1]; line1.AddPoint(trainResult.Epoch, trainResult.AvgTrainMSE); ChartPrimitive line2 = _xyLineChart.Primitives[2]; line2.AddPoint(trainResult.Epoch, trainResult.AvgTestMSE); _xyLineChart.RedrawPlotLines(); }
private void TrainingProgress() { StringBuilder learningProgressText = new StringBuilder(); ShowElapsedTime(start); learningPageViewModel.ProgressImage = null; int index = curIndex; taskbarManager.SetProgressState(TaskbarProgressBarState.Normal); switch (learningPageViewModel.CurrentState) { case TrainingStates.PreparingData: if (TaskbarManager.IsPlatformSupported) taskbarManager.SetProgressValue(curIndex, pageViewModel.DataProvider.TrainingPatternsCount); MainView.ProgressBar.Maximum = pageViewModel.DataProvider.TrainingPatternsCount; MainView.ProgressBar.Value = index; learningProgressText.Length = 0; learningProgressText.Append("Preparing Training Data..."); learningPageViewModel.ProgressText = learningProgressText.ToString(); learningPageViewModel.ProgressImageNumber = String.Empty; break; case TrainingStates.CalculatingHessian: if (TaskbarManager.IsPlatformSupported) taskbarManager.SetProgressValue(index, 500); MainView.ProgressBar.Maximum = 500; MainView.ProgressBar.Value = index; learningProgressText.Length = 0; learningProgressText.Append("Calculating Pseudo-Hessian..."); learningPageViewModel.ProgressText = learningProgressText.ToString(); learningPageViewModel.ProgressImageNumber = String.Empty; break; case TrainingStates.Training: if (TaskbarManager.IsPlatformSupported) taskbarManager.SetProgressValue(curIndex, pageViewModel.DataProvider.TrainingPatternsCount); MainView.ProgressBar.Maximum = pageViewModel.DataProvider.TrainingPatternsCount; MainView.ProgressBar.Value = index; learningProgressText.Length = 0; learningProgressText.AppendFormat(((pageViewModel.NeuralNetwork.TrainingRates[learningRateIndex].Distorted) ? ("Distorted") : ("Not distorted")) + "\nEpoch:\t\t{0}\nPattern index:\t{1}\nTraining rate:\t{2:N10}\nAverage MSE:\t{3:N10}\nError percentage:\t{4:N10}\nMisrecognitions:\t{5}", curEpoch, index, pageViewModel.NeuralNetwork.TrainingRate.Rate, avgMSE, ((double)misrecognitions / ((double)index / 100D)), misrecognitions); learningPageViewModel.ProgressText = learningProgressText.ToString(); learningPageViewModel.ProgressImage = ShowInputPattern(pageViewModel.DataProvider.RandomTrainingPattern[index], true, pageViewModel.NeuralNetwork.TrainingRates[learningRateIndex].Distorted); learningPageViewModel.ProgressImage.Freeze(); learningPageViewModel.ProgressImageNumber = pageViewModel.DataProvider.PreparedTrainingPatterns[pageViewModel.DataProvider.RandomTrainingPattern[index]].Label.ToString(); break; case TrainingStates.CalculatingTestError: if (TaskbarManager.IsPlatformSupported) taskbarManager.SetProgressValue(curIndex, pageViewModel.DataProvider.TestingPatternsCount); MainView.ProgressBar.Maximum = pageViewModel.DataProvider.TestingPatternsCount; MainView.ProgressBar.Value = index; learningProgressText.Length = 0; learningProgressText.Append("Calculating Test Error..."); learningProgressText.AppendFormat("\n\nPattern index:\t{0}\nAverage MSE:\t{1:N10}\nError percentage:\t{2:N10}\nMisrecognitions:\t{3}", index, avgTestMSE, ((double)misrecognitionsTest / ((double)index / 100D)), misrecognitionsTest); learningPageViewModel.ProgressText = learningProgressText.ToString(); learningPageViewModel.ProgressImageNumber = String.Empty; break; case TrainingStates.SavingWaits: if (TaskbarManager.IsPlatformSupported) taskbarManager.SetProgressState(TaskbarProgressBarState.NoProgress); MainView.ProgressBar.Value = 0; learningProgressText.Length = 0; learningProgressText.Append("Saving weights..."); learningPageViewModel.ProgressText = learningProgressText.ToString(); learningPageViewModel.ProgressImageNumber = String.Empty; break; case TrainingStates.NewEpoch: learningPageViewModel.ProgressImageNumber = String.Empty; TimeSpan span = DateTime.Now.Subtract(startSpan); //Swordfish.WPF.Charts.ChartUtilities.AddTestLines(learningPageViewModel.Chart); TrainingResult trainingResult = new TrainingResult(curEpoch, pageViewModel.NeuralNetwork.TrainingRate.Rate, pageViewModel.NeuralNetwork.TrainingRate.Distorted, avgMSE, misrecognitions, ((double)misrecognitions / ((double)600)), avgTestMSE, misrecognitionsTest, ((double)misrecognitionsTest / ((double)100)), new TimeSpan(span.Hours, span.Minutes, span.Seconds)); learningPageViewModel.DrawChart(trainingResult);//绘出误差曲线等 learningPageViewModel.TrainingResultCollection.Add(trainingResult); learningPageViewModel.CurrentState = TrainingStates.Idle; startSpan = DateTime.Now; break; } if (trainingStopped) { learningPageViewModel.ProgressImageNumber = String.Empty; if (TaskbarManager.IsPlatformSupported) taskbarManager.SetProgressState(TaskbarProgressBarState.NoProgress); trainingStopped = false; StopTraining(); } }