【问题标题】:Large index producing error in numpy arraynumpy 数组中的大索引产生错误
【发布时间】:2018-11-19 13:14:18
【问题描述】:

我有一个文件夹火车,其中有 13000 张动物图像。我想使用深度神经网络来训练它们。但是图像的大小不同,所以我运行以下代码来获取一个 numpy 数组 X 。

for i in range(m):
  my_image = "Img-"+str(i+1)+".jpg"
  fname = "train/train/"+my_image
  image = plt.imread(fname)
  X[i] = scipy.misc.imresize(image, size=(num_px,num_px)).reshape((1, num_px*num_px*3))

这适用于 m 到 1000 的值。但是当 m=13000 时,我的训练集的大小,它会给出以下错误

ValueError                                Traceback (most recent call last)
<ipython-input-41-c214b5b43e33> in <module>()
      3     fname = "train/train/"+my_image
      4     image = plt.imread(fname)
----> 5     X[i] = scipy.misc.imresize(image, size=(num_px,num_px)).reshape((1, num_px*num_px*3))
ValueError: cannot reshape array of size 40000 into shape (1,120000)

这里的 imresize() 是将图像调整为所需大小。我的 num_px 值为 256。 任何帮助都会非常感激

【问题讨论】:

  • 这是否意味着图像 1..1000 还可以,但是在 1001..13000 之间的某个位置至少有一个图像无法调整大小?我建议将imresize 行包含在try..except 块中,并在except 子句中打印出i。然后在交互式外壳中戳那个 JPEG 文件,看看有什么问题。

标签: python numpy image-processing scipy


【解决方案1】:

您的其中一张图像是灰度图像,而不是 RGB 图像。 请注意,help(plt.imread) 说(我的重点):

返回值为numpy.array对于灰度图像, 返回数组是 MxN。对于 RGB 图像,返回值为 MxNx3。

scipy.misc.imresize(image, size=(num_px,num_px)) 正在返回一个形状数组(num_px,num_px),而不是(num_px,num_px,3)。 因此,该数组无法重塑为(1, num_px*num_px*3)

(请注意,40000 恰好是 120000 的三分之一。)


要将所有图像转换为 RGB,您可以使用:

from PIL import Image
for i in range(m):
    my_image = "Img-"+str(i+1)+".jpg"
    fname = "train/train/"+my_image
    img = np.asarray(Image.open(fname).convert('RGB'))
    X[i] = scipy.misc.imresize(image, size=(num_px,num_px)).reshape((1, num_px*num_px*3))

为了让您的代码适应未来,还要注意help(scipy.misc.imresize) 说(我的重点):

imresize 在 SciPy 1.0.0 中已弃用,并将在 1.2.0 中删除。 请改用skimage.transform.resize

【讨论】:

    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多