public DictionaryInput(string name) { InitializeComponent(); DropDownStyle = ComboBoxStyle.DropDownList; InputName = name; DictionaryName = name.Substring(0, name.Length - 2); using (var db = new GlobalTerrorismContext()) { var type = typeof(ISystemDictionary).Assembly.GetType($"BIAI.Data.Model.{DictionaryName}"); var tableName = typeof(GlobalTerrorismContext).GetProperties().Single(x => CheckForDbSet(x, type)).Name; foreach (var entry in db.Set(type).SqlQuery($"SELECT * FROM {tableName}").Cast <ISystemDictionary>()) { var ind = Items.Add(entry.Name); dictionaryMapping.Add(ind, entry.Id); } } }
public void Start() { var dataSets = new List <TrainingDataSet>(); trainingLogger.Message($"{BELT}{DateTime.Now.TimeOfDay}{BELT}"); trainingLogger.Message("Opening connection to database"); using (var db = new GlobalTerrorismContext()) { var sampleRecord = db.AttackRecords.First(); // assert database connection trainingLogger.Message("Preparing"); var count = db.AttackRecords.Count(); var nulls = 0; initializers = Columns.Select(x => new InputInitializer(x.PropertyInfo)).ToList(); trainingLogger.Message("Downloading data"); var attackRecords = db.AttackRecords.ToList(); trainingLogger.Message("Normalizing data"); for (int i = 0; i < count; i++) { foreach (var initializer in initializers) { initializer.UpdateLimits(attackRecords[i]); } //log.Progress($"Normalizing data: {(float)i / count * 100}%"); } trainingLogger.Message("Creating data sets"); //log.Finish(); for (int i = 0; i < count; i++) { var inputs = initializers.Select(x => x.TryGetValue(attackRecords[i])); if (inputs.Any(x => x == null)) { nulls++; continue; } var dataSet = new TrainingDataSet { Inputs = inputs.Select(x => x.Value).ToArray(), Outputs = CreateOutput(attackRecords[i].Fatalities) }; //log.Progress($"Creating data sets: {(float)i / count * 100}%"); dataSets.Add(dataSet); } //log.Finish(); trainingLogger.Message($"{nulls} records skipped as they contains nulls."); } trainingLogger.Message("Training started"); network.Train( trainingDataSets: dataSets, learningRate: learningRate, learningDataPercentage: learningDataRatio ); trainingLogger.Message("Finished"); trainingLogger.Message($"Training accuracy: {network.Accuracy}"); TrainingCompleted?.Invoke(this, ProcessResult.Success); }