python - numpy 数组中的大索引产生错误
问题描述
我有一个文件夹火车,其中有 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。任何帮助都将是非常可观的
解决方案
您的其中一张图像是灰度图像,而不是 RGB 图像。注意help(plt.imread)
说(我的重点):
返回值为一个
numpy.array
。 对于灰度图像,返回数组是 MxN。对于 RGB 图像,返回值为 MxNx3。
scipy.misc.imresize(image, size=(num_px,num_px))
正在返回一个 shape 数组(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
. _
推荐阅读
- python - 来自端口的 Apache Beam 输入
- javascript - Salesforce+DocuSign:如何通过 DocuSign 使用记录联系人自动填充我的信封收件人?
- rasa-nlu - 如何在服务器上加载使用 RASA 中的 API 生成的最新数据模型?
- php - 单击链接时使用 JQUERY 和 PHP 更新 mysql
- tensorflow - 如何在每个时期完全洗牌 TensorFlow 数据集
- asp.net-web-api - Web Api Owin - 忘记密码
- bootstrap-4 - 引导列错误
- excel - Excel 忽略重复项并动态列出唯一值
- java - 在“OnCompletionListener()”内的 Music 对象上使用“dispose()”?
- r - 标记化问题