【问题标题】:Correctly reshaping MNIST images through keras通过 keras 正确重塑 MNIST 图像
【发布时间】:2017-12-26 14:03:51
【问题描述】:

如果我通过以下方式下载 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)

我可以让神经网络工作,但我不能再绘制它了。重塑它以便我仍然可以绘制的正确方法是什么?

【问题讨论】:

    标签: python image-processing keras conv-neural-network


    【解决方案1】:

    v3.3 matplotlib 的imshow 开始,现在将大小为 MxNx1 的 3d 数组强制转换为 MxN 以进行显示,因此您可以毫无问题地绘制重新整形的 X_train

    【讨论】:

      【解决方案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))
      

      【讨论】:

      • 是的,我明白这一点,但我怎样才能让它具有形状 (numPics, 28, 28, 1) 并且仍然可以工作?如果我有 (numPics, 32,32, 3),显然它可以工作。这告诉我形状中的深度层仍然可以......
      • 是的,在形状中有深度层是可以的。
      • 那么为什么我不能用形状中的深度层来绘制它呢?这是我最初的问题....
      • 在绘制 3D 数组时,它需要 RGB 或 RGBA 数据,因此我们必须在绘制之前去掉额外的维度。见here
      猜你喜欢
      • 2020-02-26
      • 2019-02-10
      • 1970-01-01
      • 2019-07-31
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      相关资源
      最近更新 更多