示例#1
0
        /// <summary>
        /// Вытаскивание RGB - компонент из изображений 28x28, получение данных для обучения нейросети
        /// </summary>
        public DataNumberDTO_28x28_Set[] GetRGBData(ref Dictionary <string, string> errors)
        {
            var dataSet = new DataNumberDTO_28x28_Set[_images.Length];

            for (int i = 0; i < _images.Length; i++)
            {
                var fileName = _images[i];
                try
                {
                    var bitmap      = new Bitmap(fileName);
                    var rightAnswer = GetRightAnswer(fileName);
                    var colorPixels = GetColorsByRows(bitmap);
                    dataSet[i] = new DataNumberDTO_28x28_Set(i, rightAnswer, colorPixels);
                }
                catch (Exception ex)
                {
                    errors.Add(fileName, ex.Message);
                }
            }
            return(dataSet);
        }
示例#2
0
        /// <summary>
        /// Проверка нейросети.
        /// Нейросеть должна предсказать, что это за цифра, отрисованная в редакторе.
        /// </summary>
        private void _checkNNBtn_Click(object sender, EventArgs e)
        {
            var id     = int.MaxValue;
            int number = int.MaxValue;

            var neural3NetworkChecker = new Neural3NetworkChecker(_neural3NetworkCreator);

            var colors = GetRGBComponents28x28FromEditor();
            var dataNumberDTO_28x28_Set = new DataNumberDTO_28x28_Set(id, number, colors);

            var signalsFromInputLayer  = new double[0];
            var signalsFromHiddenLayer = new double[0];
            var signalsFromOutputLayer = new double[0];
            var result = neural3NetworkChecker.Check(dataNumberDTO_28x28_Set, out signalsFromInputLayer, out signalsFromHiddenLayer, out signalsFromOutputLayer);

            var neural3NetworkWeightsUpdater = new Neural3NetworkWeightsUpdater(_neural3NetworkTeacher, signalsFromInputLayer, signalsFromHiddenLayer, signalsFromOutputLayer);

            var neural3NetworkHelper = new Neural3NetworkHelper(_neural3NetworkCreator);

            var rightAnswerForm = new RightAnswerForm(result.NeuronNumber, neural3NetworkWeightsUpdater, neural3NetworkHelper);

            rightAnswerForm.Show();
        }
        /// <summary>
        /// Главный метод нейросети - обучение на картинках 28x28 pixels
        /// </summary>
        public OutputSignalDTO Check(DataNumberDTO_28x28_Set imageDataSet, out double[] signalsFromInputLayer, out double[] signalsFromHiddenLayer, out double[] signalsFromOutputLayer)
        {
            var rightAnswer = imageDataSet.Number;

            var neural3NetworkHelper = new Neural3NetworkHelper(_neural3NetworkCreator);

            // Трансформирование RGB - компонент в входной сигнал для нейронов входного слоя
            var RGBComponents = imageDataSet.RGBComponents;

            signalsFromInputLayer = neural3NetworkHelper.TransformWhiteBlackPixelsToSignals(RGBComponents);

            var inputLayer            = _neural3NetworkCreator.InputLayer;
            var hiddenLayer           = _neural3NetworkCreator.HiddenLayer;
            var outputLayer           = _neural3NetworkCreator.OutputLayer;
            var inputHiddenRelations  = neural3NetworkHelper.GetInputHiddenRelations();
            var hiddenOutputRelations = neural3NetworkHelper.GetHiddenOutputRelations();

            // Вычисление комбинированного и сглаженного сигнала, пропущенного через сигмоиду,
            // данный сигнал прошел через все узлы и вышел из output layer
            signalsFromHiddenLayer = neural3NetworkHelper.CalcSignalsFromLayer(signalsFromInputLayer, inputLayer, hiddenLayer, inputHiddenRelations, _funcActivation);
            signalsFromOutputLayer = neural3NetworkHelper.CalcSignalsFromLayer(signalsFromHiddenLayer, hiddenLayer, outputLayer, hiddenOutputRelations, _funcActivation);

            return(neural3NetworkHelper.GetOutputSignalDTO(signalsFromOutputLayer));
        }