4 размера в
X = np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 1)
следующие:
размерность 0: изображения в пакете
размерность 1: строки
размерность 2: столбцы
размерность 3: количество каналов в изображении
Поскольку это шкала серого, изображение имеет 1 канал, поэтому последнее число равно 1 (если бы это было изображение RGB, последним числом было бы 3, представляющее 3 канала в RGB).
Размеры 1 и 2 - это количество строк и столбцов в каждом изображении, которое в вашем случае равно IMG_SIZE
. Размер 0 - размер партии. Вы можете указать число, если вам известен размер партии, или оставить его равным -1, и он будет определен однозначно, поскольку предоставлены все другие размеры (размеры 1,2,3).