【问题标题】:Python: How can I reshape 3D Images (np array) to 1D and then reshape them back correctly to 3D?Python:如何将 3D 图像(np 数组)重塑为 1D,然后将它们正确地重塑为 3D?
【发布时间】:2017-10-15 23:52:32
【问题描述】:

我将 RGB 图像 (32 x 32 x 3) 保存为 3D numpy 数组,用作神经网络的输入(使用 tensorflow)。为了将它们用作输入,我使用 reshape(1,-1) 将它们重塑为 1D np 数组 (1 x 3072)。当我完成网络训练后,我想重新调整输出,但使用 reshape(32,32,3) 似乎无法提供预期的结果。

这是正确的方法吗?我如何确定每个数据都会回到正确的位置?

【问题讨论】:

  • 您能否使用形状 (4,4,3) 的最小代表性样本并告诉我们预期的输出?
  • @Divakar 我想要例如:当我从 1D 重塑为 3D 时,存储在初始 3D 数组的索引 (5,10,1) 中的值回到 (5,10,1) .只要它回到原来的索引,它在 1D 中的位置对我来说并不重要。如果不清楚我会写一个小例子

标签: python arrays numpy image-processing tensorflow


【解决方案1】:

如果M(32 x 32 x 3),那么.reshape(1,-1) 将产生一个二维数组(不是一维数组),形状为(1, 32*32*3)。可以使用相同类型的 reshape 语句将其重新整形回 (32,32,3)。

但这正在改变输入和输出但是你还没有告诉我们你的网络的输出是什么样的。它有什么形状?您如何尝试重塑输出,它有什么问题?

【讨论】:

  • 输出与输入具有相同的形状。所以它的 (1,3072) 并且由于我的输入是图像,我希望输出也是一个图像。我的网络重建损失很小,当我再次尝试打印图像时,我得到黑色背景,带有红绿和蓝色线条。所以我想看看我错在哪里。 NN 或我的重塑尝试。
【解决方案2】:

如果您要创建一维数组,请使用 .reshape(-1),它将创建数组的线性版本。如果您使用 .reshape(32,32,3),这将创建一个由 32、32×3 数组组成的数组,这是所描述的原始格式。使用“-1”创建一个大小与组合嵌套数组中的元素数量相同的线性数组。

【讨论】:

  • 你说的是对的。我的问题是:在我重塑原始数组之后,这些值是否会与线性重塑之前的索引相同?
  • 只要你使用相同的参数顺序,它应该会产生一个与原始数组具有相同结构的数组。
猜你喜欢
  • 2021-02-25
  • 2020-05-04
  • 2020-04-22
  • 1970-01-01
  • 2016-01-17
  • 2017-12-03
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多