示例#1
0
        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);
                }
            }
        }
示例#2
0
        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);
        }