public void RecognizeImage(NormalizedImage image) { Debug.Assert(image != null); image.PadCanvas(Network.InputImageWidth, Network.InputImageHeight); var output = _network.Calculate(image.RawData); RefreshNetworkImage(); var builder = new StringBuilder(); var maxValueIndex = 0; for (var i = 0; i < output.Length; i++) { builder.AppendFormat("{0}: {1:0.00}", i, output[i]).AppendLine(); if (output[i] > output[maxValueIndex]) maxValueIndex = i; } builder.AppendFormat("Ответ сети: {0}", maxValueIndex).AppendLine(); History = builder + History; }
public void TestNetwork(MNistImage[] images, CancellationToken cancellation) { Debug.AssertNotNull(images); Debug.AssertNotNull(cancellation); if (_statRefresher != null && _statRefresher.Started) return; _cancelTrainToken = cancellation; var normalImages = new NormalizedImage[images.Length]; for (var i = 0; i < images.Length; i++) { normalImages[i] = new NormalizedImage(images[i]); normalImages[i].PadCanvas(Network.InputImageWidth, Network.InputImageHeight); } _testInfoBuffer.Clear(); _imageProcessed = 0; _errors.Clear(); _totalMSE = 0.0; _statRefresher = new ActionRepeater(PrintTestingInfo, 1000.0); _statRefresher.Start(false); TestProcess(normalImages); _statRefresher.Stop(true); History = txtStatistics.Text; }
private void TrainProcess(NormalizedImage[] images) { while (!_cancelTrainToken.IsCancellationRequested) { ArrayHelper<NormalizedImage>.Shuffle(images); for (var i = 0; i < images.Length && !_cancelTrainToken.IsCancellationRequested; i++) { var image = images[i]; //TODO foreach image.PadCanvas(Network.InputImageWidth, Network.InputImageHeight); var desiredOutput = ArrayHelper<double>.CreateScalar(10, -1.0, images[i].Label.Value, 1.0); _network.Train(image.RawData, desiredOutput); } } }
private void TestProcess(NormalizedImage[] images) { for (_imageProcessed = 0; _imageProcessed < images.Length; _imageProcessed++) { var desiredOutput = ArrayHelper<double>.CreateScalar(10, -1.0, images[_imageProcessed].Label.Value, 1.0); var output = _network.Calculate(images[_imageProcessed].RawData); var answer = ArrayMath.MaxValueIndex(output); var mse = ArrayMath.CalculateMSE(output, desiredOutput); if (answer != images[_imageProcessed].Label) _errors.Push(_imageProcessed); _totalMSE += mse; if (_cancelTrainToken.IsCancellationRequested) break; } }
public void TrainNetwork(MNistImage[] images, CancellationToken cancellation) { Debug.AssertNotNull(images); Debug.Assert(cancellation != null); if (_statRefresher != null && _statRefresher.Started) return; _cancelTrainToken = cancellation; var normalImages = new NormalizedImage[images.Length]; for (var i = 0; i < images.Length; i++) normalImages[i] = new NormalizedImage(images[i]); _statRefresher = new ActionRepeater(PrintTrainingInfo, 1000.0); _statRefresher.Start(false); TrainProcess(normalImages); _statRefresher.Stop(true); History = txtStatistics.Text; }
private void UdMNistImageIndexValueChanged(object sender, EventArgs e) { var index = (int) udMNistImageIndex.Value; if (nistImages != null) { if (0 <= index && index < nistImages.Length) { imgMNistImage.Image = nistImages[index].ToBitmap().Resize(2, InterpolationMode.NearestNeighbor); lblMNistImage.Text = "Подпись базы: " + nistImages[index].Label; currentInputImage = new NormalizedImage(nistImages[index]); } } else { MessageBox.Show("База MNist не загружена", "Изображение не получено", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void BtnOpenImageClick(object sender, EventArgs e) { var dialog = new OpenFileDialog {Title = "Выберите файл изображения", Filter = "Файл изображения|*.jpg"}; if (dialog.ShowDialog() != DialogResult.OK) return; try { var bitmap = (new Bitmap(dialog.FileName)).Resize(new Size(28, 28), InterpolationMode.High); currentInputImage = new NormalizedImage(bitmap); imgMNistImage.Image = currentInputImage.ToBitmap().Resize(2, InterpolationMode.NearestNeighbor); lblImageInfo.Text = string.Format("Загружено: {0}", dialog.SafeFileName); lblImageInfo.ForeColor = Color.DarkGreen; DisablePanels(PanelsState.AllEnabled); } catch { } }