数值错误:无法将形状为 (128,128,3) 的输入数组广播到形状为 (128,128)。

3

您好,我正在构建一个图像分类器,以下是代码的一小部分。 在这部分中,我试图将“ img_data_list”转换为np.array,但是 (img_ data = np.array(img_data_list)) 这行代码给我一个错误 (无法将输入数组从形状(128,128,3)广播到形状(128,128)),我不知道为什么会发生这种情况

for dataset in data_dir_list:
    img_list=os.listdir(data_path+'/'+ dataset)

    print ('Loaded the images of dataset-'+'{}\n'.format(dataset))

    for img in img_list:
        image_path = os.path.join(data_path, dataset, img)

        input_img=cv2.imread(image_path)

        if input_img is not None:
            input_img_resize=cv2.resize(input_img,(128,128))
            img_data_list.append(input_img_resize)

        else:
            print(img+' image didnt read')

img_data = np.array(img_data_list)
img_data = img_data.astype('float32')
img_data /= 255

抱歉,我是新手,我不懂。我的意思是不知道该怎么做。 - Dexter
抱歉,我没有仔细阅读你的问题。我了解一些Numpy,但我不知道cv2。我不明白为什么“img_data = np.array(img_data_list)”会给你那个错误信息。哪个数组具有(128,128,3)的形状? - PM 2Ring
cv2是一个库,用于读取、调整图像大小等操作,而img_data_list的尺寸为(128,128,3)。 - Dexter
1
你能检查一下 input_img=cv2.imread(image_path,0) 的形状吗? - arshovon
[[[123 175 188] [124 176 189] [124 176 189] ..., [255 255 255] [255 255 255] [255 255 255]]] - Dexter
3个回答

4
我发现在数据集中有一些图像损坏,将它们移除后分类器表现良好。

请问,你是怎么发现这些损坏的图像的?我觉得我可能也遇到了同样的问题。在我尝试添加更多数据后,CNN就无法正常工作了。 - The-IT
当我加载图片时,有些图片无法加载,这件事情可以在我的终端上看到,所以我从终端上得到了这些图片的名称。谢谢。 - Dexter

0

我没有看到任何令人满意的答案。 - Dexter
是的,我同意这不是一个答案,但想作为评论添加。但我的个人资料不允许。 - Rahul Pant
有什么建议吗?这个问题是关于在PyTorch中使用图像分类器时出现的ValueError。错误消息指向了一个形状为[4]的张量,该张量的数据类型为float32,并且它的softmax值为0。 - Dexter

0

当你有一个期望形状的图像,就像@Rahul Pant所说的那样,可能不是(224,224,3),因为你只检查了第0个元素的形状。我曾经在一个图像数组中遇到过这个错误,通过这段代码,我成功地解决了它。

print(len(img_data_list)) #to check the lenght of the list with elements having different shape

for item in img_data_list:
  if item.shape!=(224,224,3):
    img_data_list.remove(item)

print(len(img_data_list)) #you'll know how many corrupt sized images you had

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接