Если я загружу изображения CIFAR 10 в Керасе через:

(x_train, y_train), (x_test, y_test) = cifar10.load_data()

# Getting shape
x_train.shape
>>> (50000, 32, 32, 3)

Затем я могу построить каждое изображение, выполнив:

# Plot RGB image
plt.imshow(x_train[0])

#  Plot only one colour-channel e.g. R
plt.imshow(x_train[0][:,:,0])

Теперь я получаю изображения MNIST через Keras, выполнив:

(X_train, y_train), (X_test, y_test) = mnist.load_data()

# getting shape
X_train.shape
>>> (60000, 28, 28)

Однако у него нет канала глубины, который должен быть 1, поскольку это оттенки серого. Если я изменил его, используя:

X_train = X_train.reshape(X_train.shape[0],28,28,1)

Я могу заставить работать нейронную сеть, но больше не могу строить графики. Как правильно изменить его, чтобы я все еще мог строить сюжеты?

3
user1357015 20 Июл 2017 в 21:01

2 ответа

Лучший ответ

Если вы измените форму набора для обучения и тестирования, вам придется снова изменить форму изображений, чтобы построить их.

X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)
X_test = X_test.reshape(X_test.shape[0], 28, 28, 1)
...
plt.imshow(X_train[num].reshape(28,28))
2
Farhan 20 Июл 2017 в 21:43
Да, я понимаю это, но как мне заставить его иметь форму (numPics, 28, 28, 1) и по-прежнему работать? Ясно, что это работает, если у меня есть (numPics, 32,32, 3). Это говорит о том, что слой глубины в форме все еще в порядке ...
 – 
user1357015
20 Июл 2017 в 21:22
Да, слой глубины в форме - это нормально.
 – 
Farhan
20 Июл 2017 в 21:23
Так почему я не могу нарисовать его со слоем глубины в форме? Это моя начальная проблема ....
 – 
user1357015
20 Июл 2017 в 21:30
1
При построении трехмерного массива он ожидает данные RGB или RGBA, поэтому нам нужно избавиться от дополнительного измерения перед построением. См. здесь
 – 
Farhan
20 Июл 2017 в 21:41

Начиная с v3.3 imshow matplotlib теперь переводит трехмерные массивы размера MxNx1 в MxN для отображения, так что вы можете без проблем построить свой измененный X_train.

0
iacob 25 Мар 2021 в 00:30