繁体   English   中英

ValueError:检查输入时出错:预期 input_1 有 4 个维度,但得到了形状为(无、无、无)的数组

[英]ValueError: Error when checking input: expected input_1 to have 4 dimensions, but got array with shape (None, None, None)

我是 Tensorflow 的新手,我尝试使用 CNN 对 PDF 文件进行分类,方法是将其转换为图像并将其提供给模型。 我使用 keras 创建了一个自定义 DataGenerator(使用本教程),并且在运行 model.fit() 时出现 ValueError。

我运行 model.summary() 时的输入层是: input_1 (InputLayer) [(None, 224, 224, 3)]

下面是我的 __ getitem __ 和 __data_generation 代码:

    def __getitem__(self, index):
    index = self.index[index * self.batch_size:(index + 1) * self.batch_size]
    batch = [self.indices[k] for k in index]
    X, y = self.__data_generation(batch)
    return X, y

    def __data_generation(self, batch):
        df = self.df
        X = np.empty((self.batch_size, *self.dim))
        y = np.empty((self.batch_size), dtype=int)
        for i, id in enumerate(batch):
            
            # Loading the image :
            doc_row = df.loc[i]
            path = str(doc_row['PATH'])
            path = os.path.join(dataset_path,path)
            typologie = str(doc_row['TYPOLOGIE'])
            img_i = convert_from_path(path)[0]

            # Converting the image :
            img_i = img_i.resize((224,224), Image.ANTIALIAS)
            gray_img_i = ImageOps.grayscale(img_i)
            array_image_i = np.array(gray_img_i,dtype='float32')
            array_image_i = np.expand_dims(array_image_i, axis=0)
            X[i,] = array_image_i
            y[i] = self.map_classes[typologie]
        X = [np.array(X)]
        Y = np.array(y)
        Y = tf.keras.utils.to_categorical(Y, num_classes = self.num_classes)
        return X, Y

ValueError :检查输入时出错:预期 input_1 有 4 个维度,但得到了形状为(无、无、无)的数组

我尝试使用这里建议的 np.expand_dims() ,但它没有解决我的问题。

我怀疑转换部分坏了,但我不知道问题出在哪里。

我在这段代码中犯了两个错误:

  1. 我换了

    gray_img_i = ImageOps.grayscale(img_i) array_image_i = np.array(gray_img_i,dtype='float32')

    经过 :

     array_image_i = np.array(img_i,dtype='float32')

通过这样做,我将每个图像的形状从 (1, 224, 224) 更改为 (1, 224, 224, 3)。 形状中的“3”意味着我需要一个 RGB 图像(每个图像 3 个通道),因此去除灰度非常有用!

  1. 我换了

    doc_row = df.loc[i]

    经过 :

     doc_row = df.loc[id]

我在for循环中反转了iid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM