Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ValueError:无法将大小为50176的数组重塑为形状(1224224,3)_Python_Tensorflow_Keras_Resnet - Fatal编程技术网

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

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

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

我将图像转换为224x224 numpy数组。当我尝试下面的代码时

#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上发表文章,感谢您的洞察力。看到未来的可能性真的很有帮助。谢谢你的洞察力。看到未来的可能性真的很有帮助。