【问题标题】:Input 0 of layer max_pooling2d_5 is incompatible with the layer层 max_pooling2d_5 的输入 0 与层不兼容
【发布时间】:2021-02-10 23:07:10
【问题描述】:

在尝试训练我的模型时,我得到了

 ValueError: Input 0 of layer max_pooling2d_5 is incompatible with the layer: expected ndim=4, found ndim=5. Full shape received: (None, None, 180, 180, 16)

我的图像形状是(32, 180, 180, 3),它是 4 维的。我也在洗牌和批处理我的训练数据集:train_ds = train_ds.shuffle(100).batch(4)

网络

num_classes = 101

model = Sequential([
  layers.experimental.preprocessing.Rescaling(1./255, input_shape=(img_height, img_width, 3)),
  layers.Conv2D(16, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Conv2D(32, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Conv2D(64, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Conv2D(128, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Conv2D(256, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Flatten(),
  layers.Dense(128, activation='relu'),
  layers.Dense(num_classes, activation='softmax')
])

是什么导致了这种回溯?

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    您的原始图像似乎已经批处理。如果你批处理一个 4D 张量,它将输出一个形状的张量:

    (4, 32, 180, 180, 3)
    

    我建议您不要第二次批量处理图像。由于您将image_dataset_from_directory 与batch_size=32 一起使用,因此您无需使用.batch(4)。

    【讨论】:

    • 这意味着从我的image_dataset_from_directory 函数中删除batch_size=32 参数,对吗?在这方面我是个初学者。
    • 不,在这种情况下,您应该删除batch(4)
    • 虽然这解决了我的主要问题,但最初建议使用 batch(),因为在训练模型时整体性能较低,我尝试应用 缓存,这很快导致“内存不足”异常,并增加卷积层的数量。您还有什么建议可用于加快培训过程吗?我的数据集由 101.000 张图像组成。
    • 但是 32 号大小的批处理已经完成。你的错误是批处理
    猜你喜欢
    • 2020-11-14
    • 1970-01-01
    • 2020-10-25
    • 2021-07-04
    • 2020-11-28
    • 2021-05-31
    • 2021-03-18
    • 2021-09-13
    相关资源
    最近更新 更多