【问题标题】:Numpy - How to reshape odd array sizes?Numpy - 如何重塑奇数数组大小?
【发布时间】:2018-07-08 22:36:25
【问题描述】:

我有一个 TensorFlow 模型,我想将图像传递给它,以便它确定图像中的对象。

但是,模型抱怨图像的形状,说它想要(1, 1, 1, 2048) 的形式,但它收到的是(1, 7, 7, 2048)

我尝试通过numpy.reshape(myObj, (1, 1, 1, 2048))numpy.reshape(myObj, (1, 1, 1, -1)) 在图像上添加numpy.reshape()。但是,前者只是抱怨它无法将大小为 100352 的数组重塑为 (1, 1, 1, 2048),而后者将数组的最后一个元素调整为 (7, 7, 2048) 的倍数,即 100352。

如何重塑奇数数组大小,或者这不是 Numpy 形状/重塑的工作方式?如果 Numpy 无法实现我的要求,是否有替代方法?

【问题讨论】:

  • 阅读reshape 文档。并确保你理解为什么你的数组比模型预期的大 49 倍。

标签: python arrays numpy


【解决方案1】:

如果nm 不相等,则不能将n 元素数组重新整形为m 元素数组。对数组进行整形的操作其实就是获取同一个数组的新视图的操作。

您的输入数组包含 n=1*7*7*2048=100353 元素,而您正尝试将其重塑为包含 m=1*1*1*2048=2048 元素的数组。

正如 hpaulj 所指出的,您的问题在于您的输入形状。从您提到的形状(1, 7, 7, 2048)(1, 1, 1, 2048) 看来,您的预期输入可能应该从后面的层中提取(可能在全局池化阶段之后),但如果没有关于您的模型的更多细节,我们不能说更多。

【讨论】:

  • 好吧,我是这么认为的。该问题与我的另一篇帖子stackoverflow.com/questions/51231576/… 有关。调用ResNet50 函数时出现问题,由于某种原因,它返回(1, 7, 7, 2048) 的形状,即使我训练的ResNet50 模型使用相同的图像来训练模型。
  • 我已经想通了,我会把它作为对我其他问题的答案发布。
猜你喜欢
  • 2017-11-11
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 2020-07-11
相关资源
最近更新 更多