Самым простым решением было бы нормализовать все ваши изображения, как для обучения, так и для тестирования, с одинаковым разрешением. Также символ на каждом изображении должен быть примерно одинакового размера. Также рекомендуется использовать изображения в градациях серого, поэтому каждый пиксель дает только одно число. Тогда вы можете использовать каждое значение пикселя как один вход в вашу сеть. Например, если у вас есть изображения размером 16x16 пикселей, ваша сеть будет иметь 16 * 16 = 256 входных нейронов. Первый нейрон будет видеть значение пикселя в (0,0), второй в (0,1) и так далее. По сути, вы помещаете значения изображения в один вектор и подаете этот вектор в сеть. Это уже должно работать.
Сначала извлекая элементы (например, грани) из изображения, а затем используя сеть для этих функций, вы, возможно, сможете увеличить скорость обучения, а также сделать обнаружение более надежным. То, что вы делаете в этом случае, включает в себя предварительные знания. Для распознавания символов вы знаете определенные соответствующие функции. Таким образом, извлекая их в качестве шага предварительной обработки, сети не нужно изучать эти функции. Однако если вы предоставите неправильные, то есть нерелевантные функции, сеть не сможет изучить изображение -> сопоставление символов.