我正在尝试使用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。
答案 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)
维的完整训练数据传递到网络。