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); }); }
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(); }
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); }
public void Normalize() { double sum = Pixels.Cast <double>().Sum(); Pipeline(pixel => pixel / sum); }