Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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);
                }
            }
        }
Exemplo n.º 4
0
        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;
            }
        }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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
            {
                
            }
        }