通过Keras正确地重塑MNIST图像

3
如果我通过以下方式在Keras中下载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])

现在我通过Keras获取MNIST图像的方法如下:
(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)

我可以让神经网络工作,但无法再绘制它。应该如何正确地调整其形状,以便仍然可以绘制图形?

2个回答

4
如果您重新塑造训练和测试集,则必须将图像重新塑造回来以便绘制它们。
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))

是的,我理解了,但是我该如何让它具有形状(numPics,28,28,1)并且仍然有效?如果我有(numPics,32,32,3),那么显然它可以工作。这告诉我,在形状中具有深度层仍然可以正常工作... - user1357015
是的,在形状中具有深度层是可以的。 - Farhan
那么为什么我不能在形状中使用深度层绘制它?这是我的初始问题... - user1357015
1
当绘制一个3D数组时,它期望RGB或RGBA数据,因此我们必须在绘制之前去掉额外的维度。请参见这里 - Farhan

0
截至 v3.3 版本,matplotlib 的 imshow 现在将大小为 MxNx1 的 3D 数组强制转换为 MxN 以进行显示,因此您可以轻松绘制重新调整形状的 X_train,无需担心问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接