Что означает изменение формы (60000, 28, 28, 1)? - PullRequest
1 голос
/ 24 сентября 2019

Я одновременно изучаю сверточные сети и python.

У меня проблема со следующим кодом:

import tensorflow as tf
print(tf.__version__)
mnist = tf.keras.datasets.fashion_mnist
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()
training_images=training_images.reshape(60000, 28, 28, 1)

Я не понимаю, что означает reshape(60000, 28, 28, 1).

Что такое 60000, 28, 28 и 1?

Я получу 60000 массивов из 28 столбцов на 28 строк ... и 1 будет ...

Ответы [ 3 ]

2 голосов
/ 24 сентября 2019

Подумайте об этом, как бы вы сохранили изображения размером 60k 28 на 28 пикселей, если бы это был RGB?

Для каждого пикселя вам потребуется 3 скаляра (каждый для одного канала), поэтому это будет 60000x28x28 x3 .

А сколько каналов вам нужно, когда изображение в оттенках серого?Только один, так что это будет 60000x28x28 x1

Конечно, в случае одного канала это можно было бы упростить еще больше до 60000x28x28, но я бы сказал, что первый подход лучше, потому что вы даетев явном виде информация о том, сколько каналов имеет изображение, и о том, что некоторые платформы ML требуют, чтобы эта информация работала правильно.

0 голосов
/ 24 сентября 2019

Изменение здесь - поместить каждое изображение набора данных в один тензор, набор данных fashion mnist содержит 60 000 изображений, каждое размером 28 * 28 пикселей, и, если я вспомню, 1 является пустым измерением (так как они являются изображениями в градациях серого).), чтобы соответствовать форме ввода вашей нейронной сети.

0 голосов
/ 24 сентября 2019

это можно представить как преобразование массива training_images в 4-мерный массив с размерами 60000, 28, 28, 1 для 0-го и 3-го измерений.reshape переставляет данный массив таким образом, что размер остается тем же, то есть 60000 * 28 * 28 * 1 будет таким же, как размер training_images до изменения формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...