Reshape NumPy на 4 аргумента

Есть такой код

#Тут мы загружаем датасет MNIST
(train_images, train_labels), (_, _) = keras.datasets.mnist.load_data()

#На выходе получаем пары вида "массив изображений цифры 0", 0
#"массив изображений цифры 1", 1 и так далее, вплоть до цифры 9


print(train_images.shape) - выводит (60000, 28, 28)


train_images = train_images.reshape(train_images.shape[0], 28, 28, 1).astype('float32')


print(train_images.shape) - выводит (60000, 28, 28, 1)

Что означают эти цифры? 28х28 это разрешение самих изображений MNIST, тут всё понятно.

Что такое 60000? Это длина массива-высота матрица-общее количество изображений? И зачем мы перевели эти в другую матрицу, и что означает в ней 1?

Я понимаю что reshape переводит массив в новую форму без изменения его данных, но я не могу представить себе в чем разница между (60000, 28, 28) и (60000, 28, 28, 1) и как это выглядит? И для чего это используется?


Ответы (1 шт):

Автор решения: MaxU

Разница между (60000, 28, 28) и (60000, 28, 28, 1) именно в размерности входного тензора / матрицы. Последнее число в размерности четырехмерного тензора обычно отвечает за число цветовых каналов. Т.е. в вашем случае речь идет об изображении в оттенках серого, т.е. с одним цветовым каналом.

Для чего это используется?

Чаще всего при использовании нейронных сетей мы пользуемся готовой и проверенной архитектурой НС. Чаще всего такие архитектуры ожидают на вход тензор определенной размерности. В вашем случае - 60000 - число образцов/картинок в обучающем наборе. Каждая из этих картинок имеет размерность 28x28x1 - т.е. монохромную картинку размером 28x28/

→ Ссылка