ValueError:无法将大小为 50176 的数组重塑为形状 (1,224,224,3)

Mad*_*dhi 1 python keras tensorflow resnet

我正在做图像分类,我训练了一个模型并保存了一个模型。当我尝试预测模型时,它显示输入错误。我正在使用 ResNet 架构构建一个分类器,最初将 input_size 声明为224 x 224。现在我需要预测测试图像的类别。

我将图像转换为224x224 numpy array。当我尝试以下代码时

#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')
Run Code Online (Sandbox Code Playgroud)

它向我显示以下错误

ValueError:无法将大小为 50176 的数组重塑为形状 (1,224,224,3)

我必须以什么尺寸重塑正确的尺寸?

谢谢!

vij*_*y m 7

似乎您的输入是 size[224, 224, 1]而不是[224, 224, 3]. 看起来你转换你的投入gray scaleprocess_test_data()

您可能需要更改:

img = cv2.imread(path,cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img,(IMG_SIZ,IMG_SIZ))
Run Code Online (Sandbox Code Playgroud)

到:

img = cv2.imread(path)
img = cv2.resize(img,(IMG_SIZ,IMG_SIZ),3)
Run Code Online (Sandbox Code Playgroud)


Vad*_*dim 6

在我的情况下,函数期待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)
Run Code Online (Sandbox Code Playgroud)