如何将对象转换为数组以将可变大小的图像输入到keras中的cnn模型

时间:2018-08-08 14:11:43

标签: python tensorflow keras

我有271张具有所有不同尺寸的图像,我希望它们提供给我的cnn模型。让我们先来看一下当我将它们全部调整为50 * 50的大小并且我正在使用以下代码将它们提供给我的cnn模型时:

data_path = "/home/nd/data1/"
data_dir_list = os.listdir(data_path)
img_data_list=[]

    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:
            input_img=cv2.imread(data_path + '/'+ dataset + '/'+ img,0)
            img_data_list.append(input_img)

    img_data = np.array(img_data_list)
    img_data = img_data.astype('float32')
    img_data /= 255
    if num_channel==1:
        if K.image_dim_ordering()=='th':
            img_data= np.expand_dims(img_data, axis=1) 
        else:
            img_data= np.expand_dims(img_data, axis=4) 
    else:
        if K.image_dim_ordering()=='th':
            img_data=np.rollaxis(img_data,3,1)

那使img_data=(271,50,50,1) of float32 type,然后我最终使用model.fit(img_data, y)。但是当我输入不同大小的图像(编号为271)时,则上述代码(我注释了img_data = img_data.astype('float32'),因为否则它给出了ValueError: setting an array element with a sequence.),将img_data设为object = (271,)(numpy模块的第一个数组对象) ),然后使用mode.fit会给我带来错误ValueError: Error when checking input: expected conv2d_10_input to have 4 dimensions, but got array with shape (271, 1)(这里我没有提供完整代码的其他详细信息,因为数据馈送存在问题)

1 个答案:

答案 0 :(得分:1)

您的img_data_list包含不同大小的图像,因此无法将其变成np array。这是第一个错误的来源。不可能将不同形状的图像批量提供给卷积网络的输入。