【问题标题】:What does reshape(60000, 28, 28, 1) mean?reshape(60000, 28, 28, 1) 是什么意思?
【发布时间】:2019-09-24 13:20:46
【问题描述】:

我正在同时学习卷积网络和 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 行的数组...而第一个是...

【问题讨论】:

  • ...一个空维度。
  • @NilsWerner 和空维度?
  • 是的,想象一个具有单列的矩阵,形状为(n, 1)。基本上没有列,您可以将其表示为形状为(n,) 的向量。这意味着最后一个维度基本上是空的。现在只需将此概念扩展为 4 维数组,您就有了答案
  • 我认为 1 表示它们是只有一个颜色通道的图像。
  • 如果您的数据是图像,那么可能。但在更抽象的层面上,它们是 n 维数组中的维度。

标签: python numpy conv-neural-network


【解决方案1】:

想一想,如果是 RGB,您将如何存储 28 x 28 像素的 60k 图像?

对于每个像素,您需要 3 个标量(每个用于一个通道),因此应该是 60000x28x28x3

当图像为灰度时,您需要多少个通道?只有一个,所以它将是 60000x28x28x1

当然,在一个通道的情况下,这可以进一步简化为 60000x28x28,但我会说前一种方法更好,因为您可以明确提供有关图像有多少通道的信息,并且看起来某些 ML 框架需要该信息正确操作。

【讨论】:

  • 另外,如果您希望您的代码同时处理彩色和灰度图像,您应该确保不要遗漏这个“空白维度”。
【解决方案2】:

这里的重塑是将数据集的每个图像放入一个张量,时尚 mnist 数据集包含 60 000 个图像,每个大小为 28*28 像素,如果我记得 1 是一个空维度(因为它们是灰度图像) 以匹配您的神经网络的输入形状。

【讨论】:

    【解决方案3】:

    您可以将其视为将 training_images 数组转换为 4 维数组,第 0 到第 3 维的大小为 60000、28、28、1。 reshape 重新排列给定的数组,以使大小保持不变,即 60000* 28*28*1 将与重塑之前training_images 的大小相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-27
      • 2013-09-12
      • 2020-11-29
      • 2017-06-06
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      相关资源
      最近更新 更多