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 шт):
Разница между (60000, 28, 28) и (60000, 28, 28, 1) именно в размерности входного тензора / матрицы. Последнее число в размерности четырехмерного тензора обычно отвечает за число цветовых каналов. Т.е. в вашем случае речь идет об изображении в оттенках серого, т.е. с одним цветовым каналом.
Для чего это используется?
Чаще всего при использовании нейронных сетей мы пользуемся готовой и проверенной архитектурой НС. Чаще всего такие архитектуры ожидают на вход тензор определенной размерности. В вашем случае - 60000 - число образцов/картинок в обучающем наборе. Каждая из этих картинок имеет размерность 28x28x1 - т.е. монохромную картинку размером 28x28/