Ejemplo n.º 1
0
        private void button7_Click(object sender, EventArgs e)
        {
            string imgFile   = "";
            string labelFile = "";

            openFileDialog1.Filter = "Test data (Image)|*.*";
            openFileDialog1.Title  = "Open Test images file";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                imgFile = openFileDialog1.FileName;
            }
            else
            {
                return;
            }

            openFileDialog1.Filter = "Test data (Label)|*.*";
            openFileDialog1.Title  = "Open Test labels file";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                labelFile = openFileDialog1.FileName;
            }
            else
            {
                return;
            }

            List <TrainingSuite.TrainingData> trainingData = new List <TrainingSuite.TrainingData>();

            LoadingWindow wnd = new LoadingWindow();

            wnd.Text = "Testing network";
            int success = 0;

            var thread = new System.Threading.Thread(() => {
                wnd.SetText("Opening training file...");
                LoadTestDataFromFiles(trainingData, labelFile, imgFile, (x) => { wnd.SetProgress(x / 10); });

                wnd.SetProgress(10);

                wnd.SetText("Testing...");
                for (int i = 0; i < trainingData.Count; i++)
                {
                    var output = network.Compute(trainingData[i].input, calculator);

                    int resultIdx   = ClassifyOutput(output);
                    int expectedIdx = ClassifyOutput(trainingData[i].desiredOutput);
                    if (resultIdx == expectedIdx)
                    {
                        ++success;
                    }

                    if (i % 200 == 0)
                    {
                        wnd.SetProgress(10 + ((i * 90) / trainingData.Count));
                    }
                }

                wnd.Finish();
            });

            thread.Start();

            if (wnd.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            float perc = ((float)success / (float)trainingData.Count) * 100.0f;

            MessageBox.Show("Test completed with " + trainingData.Count + " examples. Successful were: " + success + " (" + perc + "%)", "Test complete", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Ejemplo n.º 2
0
        private void Button9_Click(object sender, EventArgs e)
        {
            System.IO.File.WriteAllText("D:\\nntmp\\log.txt", "BEGIN\n");

            string imgFile       = "";
            string labelFile     = "";
            string testImgFile   = "";
            string testLabelFile = "";

            openFileDialog1.Filter = "Image Training data (Image)|*.*";
            openFileDialog1.Title  = "Open Training images file";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                imgFile = openFileDialog1.FileName;
            }
            else
            {
                return;
            }

            openFileDialog1.Filter = "Training data (Label)|*.*";
            openFileDialog1.Title  = "Open Training labels file";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                labelFile = openFileDialog1.FileName;
            }
            else
            {
                return;
            }

            openFileDialog1.Filter = "Verification Image Training data (Image)|*.*";
            openFileDialog1.Title  = "Open Verification images file";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                testImgFile = openFileDialog1.FileName;
            }
            else
            {
                return;
            }

            openFileDialog1.Filter = "Verification Training data (Label)|*.*";
            openFileDialog1.Title  = "Open Verification labels file";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                testLabelFile = openFileDialog1.FileName;
            }
            else
            {
                return;
            }

            LoadingWindow wnd = new LoadingWindow();

            wnd.Text = "Loading training data";

            List <TrainingSuite.TrainingData> trainingData = new List <TrainingSuite.TrainingData>();
            List <TrainingSuite.TrainingData> testData     = new List <TrainingSuite.TrainingData>();

            System.Threading.Thread thread = new System.Threading.Thread(() => {
                LoadTestDataFromFiles(trainingData, labelFile, imgFile, (x) => { wnd.SetProgress(x); }, true);
                LoadTestDataFromFiles(testData, testLabelFile, testImgFile, (x) => { wnd.SetProgress(x); }, false);
                wnd.Finish();
            });

            thread.Start();

            if (wnd.ShowDialog() != DialogResult.OK)
            {
                return;
            }


            int success = 0;

            for (int i = 0; i < testData.Count; i++)
            {
                var output = network.Compute(testData[i].input, calculator);

                int resultIdx   = ClassifyOutput(output);
                int expectedIdx = ClassifyOutput(testData[i].desiredOutput);
                if (resultIdx == expectedIdx)
                {
                    ++success;
                }
            }
            network.AttachDescription("Network (" + string.Join(",", network.GetLayerConfig()) + ") epoch: 0 (initial)   Test success rate: [" + success + " of " + testData.Count + "]");
            System.IO.File.WriteAllText("D:\\nntmp\\network_000000.json", network.ExportToJSON());
            VisualizeNetworkSpecific(network, "D:\\nntmp\\network_000000_vis_", 0, ((float)success / testData.Count) * 100.0f);

            var trainingSuite = new TrainingSuite(trainingData);

            trainingSuite.config.miniBatchSize        = (int)numMiniBatchSize.Value;
            trainingSuite.config.learningRate         = (float)numLearningRate.Value;
            trainingSuite.config.regularizationLambda = (float)numLambda.Value;
            trainingSuite.config.shuffleTrainingData  = true;

            if (comboRegularization.SelectedIndex == 0)
            {
                trainingSuite.config.regularization = TrainingSuite.TrainingConfig.Regularization.None;
            }
            else if (comboRegularization.SelectedIndex == 0)
            {
                trainingSuite.config.regularization = TrainingSuite.TrainingConfig.Regularization.L1;
            }
            else if (comboRegularization.SelectedIndex == 0)
            {
                trainingSuite.config.regularization = TrainingSuite.TrainingConfig.Regularization.L2;
            }

            if (comboCostFunction.SelectedIndex == 0)
            {
                trainingSuite.config.costFunction = new MeanSquaredErrorFunction();
            }
            else if (comboCostFunction.SelectedIndex == 1)
            {
                trainingSuite.config.costFunction = new CrossEntropyErrorFunction();
            }
            trainingSuite.config.epochs = 1;

            LogDebug("Initial network saved " + DateTime.Now.ToString());

            for (int epoch = 0; epoch < (int)numEpoch.Value; epoch++)
            {
                LogDebug("Starting epoch #" + (epoch + 1) + "  " + DateTime.Now.ToString());

                trainingPromise = network.Train(trainingSuite, calculator);
                trainingPromise.Await();
                LogDebug("  Training finished  " + DateTime.Now.ToString());

                success = 0;
                for (int i = 0; i < testData.Count; i++)
                {
                    var output = network.Compute(testData[i].input, calculator);

                    int resultIdx   = ClassifyOutput(output);
                    int expectedIdx = ClassifyOutput(testData[i].desiredOutput);
                    if (resultIdx == expectedIdx)
                    {
                        ++success;
                    }
                }
                LogDebug("  Verification finished Success rate: [" + success + " of " + testData.Count + "]  " + DateTime.Now.ToString());

                network.AttachDescription("Network (" + string.Join(",", network.GetLayerConfig()) + ") epoch: " + (epoch + 1) + "    Test success rate: [" + success + " of " + testData.Count + "]");
                System.IO.File.WriteAllText("D:\\nntmp\\network_" + (epoch + 1).ToString().PadLeft(6, '0') + ".json", network.ExportToJSON());
                VisualizeNetworkSpecific(network, "D:\\nntmp\\network_" + (epoch + 1).ToString().PadLeft(6, '0') + "_vis_", epoch + 1, ((float)success / testData.Count) * 100.0f);
                LogDebug("  Saving finished  " + DateTime.Now.ToString());
            }
        }
Ejemplo n.º 3
0
        private void button4_Click(object sender, EventArgs e)
        {
            string imgFile   = "";
            string labelFile = "";

            openFileDialog1.Filter = "Image Training data (Image)|*.*";
            openFileDialog1.Title  = "Open Training images file";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                imgFile = openFileDialog1.FileName;
            }
            else
            {
                return;
            }

            openFileDialog1.Filter = "Training data (Label)|*.*";
            openFileDialog1.Title  = "Open Training labels file";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                labelFile = openFileDialog1.FileName;
            }
            else
            {
                return;
            }

            LoadingWindow wnd = new LoadingWindow();

            wnd.Text = "Loading training data";

            List <TrainingSuite.TrainingData> trainingData = new List <TrainingSuite.TrainingData>();

            System.Threading.Thread thread = new System.Threading.Thread(() => {
                LoadTestDataFromFiles(trainingData, labelFile, imgFile, (x) => { wnd.SetProgress(x); }, true);
                wnd.Finish();
            });

            thread.Start();

            if (wnd.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            var trainingSuite = new TrainingSuite(trainingData);

            trainingSuite.config.miniBatchSize        = (int)numMiniBatchSize.Value;
            trainingSuite.config.learningRate         = (float)numLearningRate.Value;
            trainingSuite.config.regularizationLambda = (float)numLambda.Value;
            trainingSuite.config.shuffleTrainingData  = checkShuffle.Checked;

            if (comboRegularization.SelectedIndex == 0)
            {
                trainingSuite.config.regularization = TrainingSuite.TrainingConfig.Regularization.None;
            }
            else if (comboRegularization.SelectedIndex == 0)
            {
                trainingSuite.config.regularization = TrainingSuite.TrainingConfig.Regularization.L1;
            }
            else if (comboRegularization.SelectedIndex == 0)
            {
                trainingSuite.config.regularization = TrainingSuite.TrainingConfig.Regularization.L2;
            }

            if (comboCostFunction.SelectedIndex == 0)
            {
                trainingSuite.config.costFunction = new MeanSquaredErrorFunction();
            }
            else if (comboCostFunction.SelectedIndex == 1)
            {
                trainingSuite.config.costFunction = new CrossEntropyErrorFunction();
            }

            trainingSuite.config.epochs = (int)numEpoch.Value;

            trainingStart   = DateTime.Now;
            trainingPromise = network.Train(trainingSuite, calculator);
            trainingtimer.Start();


            progressDialog = new TrainingWindow(trainingPromise);
            progressDialog.ShowDialog();
        }