Пример #1
0
        public async Task EmptyFolder_GeneratesCsvTrainDataEmpty()
        {
            const string inputDirectory = "./Resources/trainDataGeneratorFolderEmpty/";
            const string outputCsvFile  = inputDirectory + "trainDataGenerated.csv";

            try
            {
                Directory.CreateDirectory(inputDirectory);
                Assert.AreEqual(Directory.GetFiles(inputDirectory, "*.json").Length, 0);
                Assert.IsFalse(File.Exists(outputCsvFile));

                var trainDataGenerator = new FileSystemTrainDataGenerator(inputDirectory, outputCsvFile);

                await trainDataGenerator.GenerateTrainData();

                Assert.AreEqual(Directory.GetFiles(inputDirectory, "*.json").Length, 0);
                Assert.IsTrue(File.Exists(outputCsvFile));

                using StreamReader sr = File.OpenText(outputCsvFile);
                string s = sr.ReadLine();

                Assert.AreEqual(s, "c,c#,d,d#,e,f,f#,g,g#,a,a#,b,chord");
            }
            finally
            {
                File.Delete(outputCsvFile);
                Directory.Delete(inputDirectory);
            }
        }
Пример #2
0
        public async Task WithChordsInFolder_GeneratesCsvTrainData()
        {
            const string inputDirectory = "./Resources/trainDataGeneratorFolder10Chords/";
            const string outputCsvFile  = inputDirectory + "trainDataGenerated.csv";

            try
            {
                Directory.CreateDirectory(inputDirectory);
                Assert.AreEqual(Directory.GetFiles(inputDirectory, "*.json").Length, 0);
                Assert.IsFalse(File.Exists(outputCsvFile));

                var respository = new FileSystemChordRepository(inputDirectory);

                var chords = new Chord[10];
                for (var i = 0; i < 10; i++)
                {
                    chords[i] = ChordTest.ChordExample();
                }

                foreach (Chord chord in chords)
                {
                    respository.SaveChord(chord);
                }

                Assert.AreEqual(Directory.GetFiles(inputDirectory, "*.json").Length, 10);
                Assert.IsFalse(File.Exists(outputCsvFile));

                var trainDataGenerator = new FileSystemTrainDataGenerator(inputDirectory, outputCsvFile);
                await trainDataGenerator.GenerateTrainData();

                Assert.AreEqual(Directory.GetFiles(inputDirectory, "*.json").Length, 10);
                Assert.IsTrue(File.Exists(outputCsvFile));

                string[] fileContent = File.ReadAllText(outputCsvFile).Split("\n");

                Assert.AreEqual(fileContent.Length, 12);

                var contentsRegistry = fileContent[4].Split(",");
                Assert.AreEqual(contentsRegistry.Length, 13);

                for (var i = 0; i < contentsRegistry.Length - 1; i++)
                {
                    var isDouble = double.TryParse(contentsRegistry[i], out double _);
                    Assert.IsTrue(isDouble);
                }

                Assert.AreEqual(contentsRegistry[12], chords[4].Name.ToLower());
                Assert.AreEqual(fileContent[0], "c,c#,d,d#,e,f,f#,g,g#,a,a#,b,chord");
            }
            finally
            {
                File.Delete(outputCsvFile);
                var filesToDelete = Directory.GetFiles(inputDirectory, "*.json");
                foreach (string fileToDelete in filesToDelete)
                {
                    File.Delete(fileToDelete);
                }
                Directory.Delete(inputDirectory);
            }
        }
Пример #3
0
        static async Task Main(string[] args)
        {
            uint   secondsToRun = 1;
            string directory    = null;

            if (args.Length >= 1)
            {
                secondsToRun = uint.Parse(args[0]);
            }

            if (args.Length >= 2)
            {
                directory = args[1];
            }

            if (directory != null)
            {
                var trainDataGenerator = new FileSystemTrainDataGenerator(directory, Path.Combine(directory, "trainData.csv"));
                await trainDataGenerator.GenerateTrainData();
            }

            var currentTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();

            Console.WriteLine(
                $@"Training Prediction model with AutoML for {secondsToRun} seconds");

            var textLoader = AutoMlModelCreation.MlContextInstance
                             .Data.CreateTextLoader <ChordData>(separatorChar: ',', hasHeader: true);

            var trainDataFiles = Directory.GetFiles(directory, "*.csv");
            var trainData      = textLoader.Load(trainDataFiles.Append("./Resources/trainData.csv").ToArray());

            var(_, modelWithLabelMapping, experimentResult) =
                AutoMlModelCreation.CreateTransformerGivenDataView(trainData, secondsToRun);


            Console.WriteLine();
            GetAndPrintValidationMetricsForData(experimentResult, "./Resources/testData.csv");
            Console.WriteLine();
            var validationMetrics = GetAndPrintValidationMetricsForData(experimentResult, "./Resources/trainData.csv");

            Console.WriteLine();

            AutoMlModelCreation.MlContextInstance.Model.Save(
                modelWithLabelMapping, trainData.Schema,
                $@"./generatedModels/model{currentTime}S{secondsToRun}L{validationMetrics.LogLoss}.model");
        }