Esempio n. 1
0
        private static KmeansTrainResult <RawImage28x28> AskKmeansTrainData(bool SkipConfirm)
        {
            while (true)
            {
                string input;

                if (SkipConfirm)
                {
                    input = "t";
                }
                else
                {
                    Console.WriteLine("Input 't' to start training, 'i' to ignore.");
                    input = Console.ReadLine();
                }

                if (input.ToLower().Contains('t'))
                {
                    Console.WriteLine("Input ConvDistance:(Default:3)");
                    float ConvDistance = Convert.ToSingle(Console.ReadLine());
                    Console.WriteLine("Input iteration limit:(Default:200)");
                    int IterationLimit = Convert.ToInt32(Console.ReadLine());

                    Console.WriteLine("Training......");
                    var MnistDataSet = MnistDataSetLoader.LoadData(MnistPixelFilePath, MnistLabelFilePath);
                    KmeansTrainer <RawImage28x28> kmeansTrainer = new KmeansTrainer <RawImage28x28>(MnistDataSet, 10, ConvDistance, IterationLimit);
                    var TrainResult = kmeansTrainer.Train();

                    Console.WriteLine("Save trained result?[y/n]");
                    if (Console.ReadLine().ToLower().Contains('y'))
                    {
                        TrainResult.SaveToFile(KmeansTrainResultFilePath);
                        Console.WriteLine("Saved at {0}", KmeansTrainResultFilePath);
                    }

                    return(TrainResult);
                }
                else if (input.ToLower().Contains("i"))
                {
                    return(null);
                }
            }
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            VectorCollection <RawImage28x28> Dataset = null;
            Knn <RawImage28x28> knn = null;
            KmeansTrainResult <RawImage28x28> KmeansTrainResult = null;
            Kmeans <RawImage28x28>            kmeans            = null;

            //CheckFiles
            if (File.Exists(MnistPixelFilePath) == false)
            {
                MnistPixelFilePath = Environment.CurrentDirectory + "\\train-images.idx3-ubyte";
            }

            if (File.Exists(MnistLabelFilePath) == false)
            {
                MnistLabelFilePath = Environment.CurrentDirectory + "\\train-labels.idx1-ubyte";
            }

            if (File.Exists(KmeansTrainResultFilePath) == false)
            {
                KmeansTrainResultFilePath = Environment.CurrentDirectory + "\\KmeansTrainResult.json";
            }


            //LoadFiles
            if (File.Exists(MnistPixelFilePath) && File.Exists(MnistLabelFilePath))
            {
                var MnistDataSet = MnistDataSetLoader.LoadData(MnistPixelFilePath, MnistLabelFilePath);
                Dataset = new VectorCollection <RawImage28x28>(MnistDataSet);
            }

            if (File.Exists(KmeansTrainResultFilePath))
            {
                KmeansTrainResult = new KmeansTrainResult <RawImage28x28>(KmeansTrainResultFilePath);
            }

            if (Dataset != null)
            {
                var knnTrainer = new KnnTrainer <RawImage28x28>(Dataset);
                knn = new Knn <RawImage28x28>(knnTrainer.Train());

                if (KmeansTrainResult == null)
                {
                    Console.WriteLine("Can't find Kmeans train data.");
                    KmeansTrainResult = AskKmeansTrainData(false);
                }
                else if (KmeansTrainResult != null)
                {
                    Console.WriteLine("Found Kmeans train data.");
                    Console.WriteLine("[U]se trained data or [t]rain again? [u/t]");
                    if (Console.ReadLine().ToLower().Contains('t'))
                    {
                        KmeansTrainResult = null;
                        KmeansTrainResult = AskKmeansTrainData(true);
                    }
                }
            }
            else
            {
                Console.WriteLine("Can't find Knn train data, ignored");
                Console.WriteLine("Press any key to continue.");
                Console.ReadKey();
            }

            if (KmeansTrainResult != null)
            {
                kmeans = new Kmeans <RawImage28x28>(KmeansTrainResult);
            }

            if (kmeans == null && knn == null)
            {
                Console.WriteLine("Fatal error: Can not find any trained data.");
                Console.WriteLine("Press any key to exit...");
                Console.ReadKey();
                return;
            }

            MainForm form = new MainForm(knn, kmeans);

            Application.EnableVisualStyles();
            Application.Run(form);
        }