Example #1
0
        public NetworkTestingViewModel(NeuralNetwork network, PatternContainer patternContainer)
        {
            _network                = network;
            _patternContainer       = patternContainer;
            PredictCommand          = new AsyncRelayCommand(async() => await Task.Run(() => Predict()));
            AddToTrainingSetCommand = new RelayCommand(() =>
            {
                var dialog = new Views.SavePatternAsDialog
                {
                    ResponseText = Predictions?.FirstOrDefault(p => p.IsHighest)?.Name ?? string.Empty
                };
                if (dialog.ShowDialog() != true)
                {
                    return;
                }

                var pattern = new Pattern
                {
                    Name    = dialog.ResponseText,
                    Rows    = 15,
                    Columns = 10
                };

                // 0 - black, 1 - white
                pattern.FillUsing(Pixels.Cast <double>().Select(p => p < 0.5).ToArray());
                _patternContainer.Add(pattern);
            });
        }
Example #2
0
        public void Predict()
        {
            if (Pixels == null)
            {
                return;
            }

            var output = _network.Run(Pixels.Cast <double>().Select(x => x >= 0.5 ? -1.0 : 1.0).ToArray());

            var maxIndex = output
                           .Select((value, index) => new { Index = index, Value = value })
                           .OrderByDescending(x => x.Value)
                           .Select(x => x.Index)
                           .First();

            Predictions = _patternContainer.Patterns
                          .GroupBy(pattern => pattern.Name)
                          .OrderBy(x => x.Key)
                          .Select((group, index) => new Prediction
            {
                Name      = group.Key,
                Value     = output[index],
                IsHighest = index == maxIndex
            }).ToArray();
        }
Example #3
0
        private void AddToTrainingSet()
        {
            if (string.IsNullOrEmpty(SaveAsName))
            {
                return;
            }

            var pattern = new Pattern
            {
                Name    = SaveAsName,
                Rows    = 15,
                Columns = 10
            };

            // 0 - black, 1 - white
            pattern.FillUsing(Pixels.Cast <double>().Select(x => x < 0.5).ToArray());
            _patternContainer.Add(pattern);
        }
Example #4
0
        public void Normalize()
        {
            double sum = Pixels.Cast <double>().Sum();

            Pipeline(pixel => pixel / sum);
        }