Заполнение изображений MNIST от (28, 28, 1) до (32, 32, 1) - PullRequest
1 голос
/ 19 апреля 2020

Я использую набор данных MNIST из TensorFlow 2.0 и пытаюсь заполнить его нулями и увеличить размер изображения с (28, 28, 1) до (32, 32, 1). Код такой:

# Load MNIST dataset-
(X_train, y_train), (X_test, y_test) = tf.keras.datasets.mnist.load_data()

X_train.shape, y_train.shape
# ((60000, 28, 28), (60000,))

X_test.shape, y_test.shape
# ((10000, 28, 28), (10000,))

# Pad with 2 zeros on left and right hand sides-
X_train_padded = np.pad(X_train[:,], (2, 2), 'constant')

X_train_padded.shape
# (60004, 32, 32)

Однако функция «np.pad ()», использованная выше, не дает мне желаемой формы (6000, 32, 32), а также возвращает массивы, заполненные нулями. ! Вместо исходных значений, как в X_train.

Вы можете помочь?

Я использую Python 3.8, TensorFlow 2.0 и numpy 1.18.

Спасибо!

1 Ответ

1 голос
/ 19 апреля 2020

Вы используете numpy.pad неправильно.

  1. Ваш массив (6000,32,32), поэтому вы хотите заполнить только ось 1 и 2, а не ось 0.
  2. Аргумент pad_width для np.pad работает следующим образом: ((axis 1 pad before, axis 1 pad after), ...), поэтому, если вы хотите заполнить 1 пиксель с каждой стороны, вы должны сделать ((0,0), (1,1), (1,1)). (Ваш код дополняет все оси 2 с каждой стороны.)

Вот игрушечный пример:

z = np.arange(12).reshape(3,2,2)
print(z.shape)
# (3, 2, 2)

z = np.pad(z, ((0,0),(1,1),(1,1)), 'constant')
print(z.shape)
# (3, 4, 4)

# as an example, take a look at the second "image"
print(z[1])
# [[0 0 0 0]
#  [0 4 5 0]
#  [0 6 7 0]
#  [0 0 0 0]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...