imread использует PIL или Pillow для чтения изображений, возвращает изображения в формате:
высота х ширина х каналов
где каналы - это обычно 3 канала (красный, зеленый, синий [RGB] обычного цветного изображения) или иногда 4 канала (красный, зеленый, синий, альфа / прозрачность [RGBA]).
Итак, вы читаете изображение размером 842x1116
пикселей с 4 цветными каналами. Вы говорите, что используете тренировочные данные формы (xxxx, 28, 28), поэтому вы используете изображения в оттенках серого, а не цветные изображения. Первым шагом будет преобразование цветного изображения в оттенки серого. Pillow
(в качестве замены для PIL) - хорошая библиотека для операций с изображениями. В качестве альтернативы вы можете просто использовать один канал
gray_data = data[:,:,0]
Чтобы использовать его в качестве обучающих данных, теперь вы можете либо изменить его размер до 28x28, либо извлечь из него небольшие участки размером 28x28.
small_data = gray_data[:28,:28]
Это приведет к (28,28). Большинство алгоритмов обучения рассчитывают не одно, а несколько изображений, в основном в формате (#images, height, width). Так что вам нужно изменить его:
final_data = small_data.reshape(1,28,28)
Это должно сделать это. Тем не менее, правильное преобразование и изменение размера RGB (A) в серый будет лучшим решением. Подробности см. В документации на подушку.