Keras不兼容的数据形状

时间:2020-06-18 13:34:12

标签: python numpy tensorflow keras deep-learning

我正在尝试使用CamVid数据训练SegNet模型。我从https://github.com/ykamikawa/tf-keras-SegNet获得了源代码。但是,出现以下错误:

ValueError: Input 0 of layer conv2d_152 is incompatible with the layer: expected ndim=4, found ndim=3. Full shape received: [360, 480, 3]

训练数据形状为(233、360、480、3)。我阅读了一些解决方案,他们说我需要向模型提供(无,360、480、3)形状数据。如何将数据重塑到此维度。

我正在使用tensorflow2。

2 个答案:

答案 0 :(得分:1)

从数据中获取数据集。简单的解决方法是:

x = np.zeros((233, 360, 480, 3))
dataset = tf.data.Dataset.from_tensor_slices(x).batch(1)

假设x是您给定的输入(在我的情况下为全零),数据集将具有以下形状:<BatchDataset shapes: (None, 360, 480, 3), types: tf.float64> 但是,我建议您阅读Tensorflow文档here的数据集部分。

答案 1 :(得分:0)

您正在将没有批处理尺寸的单个图像传递到网络。 (否则ndim为4)。当您使用train_data[i]选择单个图像时,批次尺寸可能会折叠。尝试使用train_data[i:i+1]选择图像或使用None添加尺寸,如下所示:

img = train_data[i]
img = img[None, :, :, :]

然后将其传递给网络。

可以肯定的是,您没有将(233, 360, 480, 3)维的完整训练数据传递到网络。