/// <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); }
/// <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)); }