Python ValueError:无法将大小为50176的数组重塑为形状(1224224,3)
我正在做图像分类,我训练了一个模型并保存了一个模型。当我尝试预测模型时,它显示输入错误。我正在使用ResNet架构构建一个分类器,并最初将输入大小声明为224x224。现在我需要预测测试图像的类别 我将图像转换为224x224 numpy数组。当我尝试下面的代码时Python ValueError:无法将大小为50176的数组重塑为形状(1224224,3),python,tensorflow,keras,resnet,Python,Tensorflow,Keras,Resnet,我正在做图像分类,我训练了一个模型并保存了一个模型。当我尝试预测模型时,它显示输入错误。我正在使用ResNet架构构建一个分类器,并最初将输入大小声明为224x224。现在我需要预测测试图像的类别 我将图像转换为224x224 numpy数组。当我尝试下面的代码时 #plot the figure fig = plt.figure() for num,data in enumerate(test_data): img_num = data[1] img_data = data
#plot the figure
fig = plt.figure()
for num,data in enumerate(test_data):
img_num = data[1]
img_data = data[0]
y = fig.add_subplot(9,3,num+1)
orig = img_data
data = img_data.reshape(1,IMG_SIZ,IMG_SIZ,3)
#predict the model
model_out = model.predict_classes([orig])[0]
if np.argmax(model_out) == 1: str_label='Dog'
else: str_label='Cat'
y.imshow(orig,cmap = 'gray')
plt.title(str_label)
y.axes.get_xaxis().set_visible(False)
y.axes.get_yaxis().set_visible(False)
plt.show()
plt.savefig('test_labeled.jpg')
它向我显示了以下错误
ValueError:无法将大小为50176的数组重塑为形状
(1224224,3)
我必须以什么尺寸重塑正确的尺寸
谢谢 似乎您的输入的大小是
[224224,224,1]
,而不是[224,224,3]
。看起来您正在将输入转换为process\u test\u data()
您可能需要更改:
img = cv2.imread(path,cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img,(IMG_SIZ,IMG_SIZ))
致:
似乎您的输入大小为
[224224,224,1]
,而不是[224,224,3]
。看起来您正在将输入转换为process\u test\u data()
您可能需要更改:
img = cv2.imread(path,cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img,(IMG_SIZ,IMG_SIZ))
致:
在我的例子中,函数期望的是
RGB
图像,但它失败了,因为它是RGBA
一个,这意味着它有4个通道,而不是3个。
所以我重新设计了它们的功能,以便能够吞下RGBA
def load_image_into_numpy_array(image):
(im_width, im_height) = image.size
if image.getdata().mode == "RGBA":
image = image.convert('RGB')
np_array = np.array(image.getdata())
reshaped = np_array.reshape((im_height, im_width, 3))
return reshaped.astype(np.uint8)
在我的例子中,函数期望的是
RGB
图像,但它失败了,因为它是RGBA
一个,这意味着它有4个通道,而不是3个。
所以我重新设计了它们的功能,以便能够吞下RGBA
def load_image_into_numpy_array(image):
(im_width, im_height) = image.size
if image.getdata().mode == "RGBA":
image = image.convert('RGB')
np_array = np.array(image.getdata())
reshaped = np_array.reshape((im_height, im_width, 3))
return reshaped.astype(np.uint8)
什么是
数据[0]
?您是否试图使用.reforme()
调整图像大小?在测试数据中,有两个变量组合在一起。数据[1]是图像id,数据[0]是形状(224x224)的图像矩阵,似乎您的输入的大小是[224,224,1]
,而不是[224,224,3]
,因此相应地重新形状。我将尺寸更改为(224x224x1),但现在此错误弹出值错误:检查输入时出错:预期resnet50\u输入具有形状(无,无,3)但是得到了形状为(2242241)的数组,你能检查整个代码吗?我在github gist中发布了什么是数据[0]
?您是否试图使用.reforme()
调整图像大小?在测试数据中,有两个变量组合在一起。数据[1]是图像id,数据[0]是形状(224x224)的图像矩阵,似乎您的输入的大小是[224,224,1]
,而不是[224,224,3]
,因此相应地重新形状。我将尺寸更改为(224x224x1),但现在此错误弹出值错误:检查输入时出错:预期resnet50\u输入具有形状(无,无,3)但是得到了形状为(2242241)的数组,你能检查整个代码吗?我在github上发表文章,感谢您的洞察力。看到未来的可能性真的很有帮助。谢谢你的洞察力。看到未来的可能性真的很有帮助。