internal async Task <bool> CreateMLConfig(MLConfigController mlconfig) { //save project with new created mlconfig await Save(); //create model name string modelName = $"MLConfig{Models.Count}"; //Define ml data file paths var strModelFolder = Project.GetMLConfigFolder(Settings, modelName); var strModelDataFolder = Project.GetMLConfigDataFolder(Settings, modelName); //check if model folder exists if (!Directory.Exists(strModelFolder)) { Directory.CreateDirectory(strModelFolder); } //check if data folder exists if (!Directory.Exists(strModelDataFolder)) { Directory.CreateDirectory(strModelDataFolder); } //model name and settings mlconfig.Name = modelName; mlconfig.Settings = Settings; //load project file in order to get settings information and data description needed for data transformation var strPPath = Path.Combine(Settings.ProjectFolder, Settings.ProjectFile); var proj = new Project(); proj.Load(strPPath); //ToDo: optimizes code for huge dataset if (Settings.ProjectType == ProjectType.Default) { createDefaultDataSets(DataSet, modelName, proj.Descriptor); } else if (Settings.ProjectType == ProjectType.ImageClassification) { createImgClassificationDataSets(DataSet, modelName, proj.Descriptor); } else { ; } //create mlconfig file Project.NewMLConfigFile(proj, modelName, DataSet); //initialize model mlconfig.Init(); //add newly created model in to Model collection of the project Models.Add(mlconfig); //save project with new created mlconfig return(await Save()); }
internal void CreateMLConfig(MLConfigController mlconfig) { //save project with new created mlconfig Save(); //create model name string modelName = $"MLConfig{Models.Count}"; //Define ml data file paths var strModelFolder = Project.GetMLConfigFolder(Settings, modelName); var strModelDataFolder = Project.GetMLConfigDataFolder(Settings, modelName); var strPathTrain = Project.GetDefaultMLDatasetPath(Settings, modelName, true); var strPathValid = Project.GetDefaultMLDatasetPath(Settings, modelName, false); //check if model folder exists if (!Directory.Exists(strModelFolder)) { Directory.CreateDirectory(strModelFolder); } //check if data folder exists if (!Directory.Exists(strModelDataFolder)) { Directory.CreateDirectory(strModelDataFolder); } //get dataset based on options var ds = DataSet.GetDataSet(DataSet.RandomizeData); //we want whole data set later the data will be split ds.TestRows = 0; //create experiment based created dataset var exp = new Experiment(ds); var data = ExportData.PrepareDataSet(exp); //calculate validation and training rows int validCount = DataSet.IsPrecentige ? (int)(DataSet.TestRows * data.Count / 100.0) : DataSet.TestRows; //in case of empty validation data set skip file creation if (validCount == 0) { strPathValid = ""; } //create training ml ready dataset file int trainCount = data.Count - validCount; if (trainCount <= 0) { throw new Exception("Train dataset is empty. Split data set on correct parts."); } File.WriteAllLines(strPathTrain, data.Take(trainCount).ToList()); //in case of empty validation data set skip file creation if (validCount > 0) { var d = data.Skip(trainCount).Take(validCount).ToList(); File.WriteAllLines(strPathValid, d); } //model name and settings mlconfig.Name = modelName; mlconfig.Settings = Settings; //load project file in order to get settings information and data description needed for data transformation var strPPath = Path.Combine(Settings.ProjectFolder, Settings.ProjectFile); var proj = new Project(); proj.Load(strPPath); //enumerate all column and setup column information needed for mlconfig creation foreach (var c in proj.Descriptor.Columns.Where(x => x.Type == DataType.Category && x.Kind != DataKind.None)) { var cc = exp.GetColumns().Where(x => x.Name == c.Name && x.ColumnDataType == ColumnType.Category).FirstOrDefault(); if (cc == null) { throw new Exception("Column not found!"); } c.Classes = cc.Statistics.Categories.ToArray(); } //create mlconfig file Project.NewMLConfigFile(proj, modelName); //initialize model mlconfig.Init(); //add newly created model in to Model collection of the project Models.Add(mlconfig); //save project with new created mlconfig Save(); }