嗨,我正在构建一个图像分类器,这是我代码的一小部分 在这一部分我试图' 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
答案 0 :(得分:2)
我发现解决方案在删除分类器后,数据集中的某些图像已损坏
答案 1 :(得分:0)
我没有使用cv2,但在其他一些地方看到了这个问题。如果列表中的任何一个图像没有预期的大小(224,224,3),则可能会出现上述问题。
另一个类似的SO帖子:ValueError: could not broadcast input array from shape (224,224,3) into shape (224,224)
您可以重新生成数据并尝试吗?
答案 2 :(得分:0)
这种情况发生在您具有期望形状的图像时,如@Rahul Pant所说,可能不是(224,224,3),因为您只检查了第0个元素的形状。我在Image数组中遇到此错误,并且可以通过此代码修复它。
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