Keras ValueError: Input 0 is in compatible with layer conv2d_1: expected ndim=4, found ndim=5

Posted

技术标签:

【中文标题】Keras ValueError: Input 0 is in compatible with layer conv2d_1: expected ndim=4, found ndim=5【英文标题】:Keras ValueError: Input 0 is incompatible with layer conv2d_1: expected ndim=4, found ndim=5 【发布时间】:2018-05-19 19:25:02 【问题描述】:

我已经检查了所有解决方案,但我仍然面临同样的错误。我的训练图像形状是(26721, 32, 32, 1),我相信它是 4 维,但我不知道为什么错误显示它是 5 维。

 model = Sequential()

 model.add(Convolution2D(16, 5, 5, border_mode='same', input_shape= input_shape ))

这就是我定义model.fit_generator的方式

model.fit_generator(train_dataset, train_labels, nb_epoch=epochs, verbose=1,validation_data=(valid_dataset, valid_labels), nb_val_samples=valid_dataset.shape[0],callbacks=model_callbacks)

【问题讨论】:

【参考方案1】:

你可以使用:

train_dataset=train_dataset.reshape(-1,32,32,1)

现在您可以在算法中使用 input_shape(32,32,1)。

【讨论】:

而不仅仅是发布简短的 cmets you could do this and then this 作为答案,您应该通过例如显示问题中实现的代码来说明如何实现这一点。就像现在一样,这是评论而不是答案。考虑编辑您的答案以提供更多详细信息。 @Sanketsz 我需要一个 ndim=5 的输入形状,但我的输入形状= (18, 64, 1688),所以我将其重新整形为:data=data.reshape(18, 64, 1688 , 1, 1)。并将其传递给我的包含 conv2D 和 convLSTM2D 层的模型。但它给了我一个错误:conv_lst_m2d_88 层的输入 0 与该层不兼容:预期 ndim=5,发现 ndim=6。收到的完整形状:(无、无、64、211、1、128)。我该如何解决它,请指导我,这将是一个很大的帮助。【参考方案2】:

我也遇到了同样的问题

输入 0 与层 conv2d_4 不兼容:除了 ndim=4 ,发现 ndim=3

我通过简单地将值放入输入形状中解决了这个问题

Input_shape=(img_rows,img_cols,1)#store the shape of single image. .. & the problem is solved

【讨论】:

【参考方案3】:

为了重塑数据,我们需要添加第四个维度,即从 (6000,28,28) 更改为 (6000,28,28,1)

我的代码是:

img_rows=x_train[0].shape[0]
img_cols=x_test[0].shape[1]

X_train=x_train.reshape(x_train.shape[0],img_rows,img_cols,1)

X_test=x_test.reshape(x_test.shape[0],img_rows,img_cols,1)


Input_shape=(img_rows,img_cols,**).  *->  I forgot to put 1 here.

我也遇到了同样的问题

Input 0 is incompatible with layer conv2d_4 : except ndim=4 ,found ndim=3

我通过简单地将值放入输入形状中解决了这个问题

Input_shape=(img_rows,img_cols,1)#store the shape of single image.

这个问题解决了

【讨论】:

【参考方案4】:

这里你需要检查 "channels_first" 每当 CNN 用作 2d 时,还将你的 train_data 和测试数据重塑为:

if K.image_data_format() == 'channels_first':   #check for channels_first
 train_img.reshape(train_img.shape[0],1,x,x)
 Input_shape=(1,x,x)                            #In your case x is 32
else:
 train_img.reshape(train_img.shape[0],x,x,1)
 Input_shape=(x,x,1)

【讨论】:

【参考方案5】:

问题在于input_shape。尝试添加一个额外的维度/通道,让 keras 知道您正在处理灰度图像,即 -->1

input_shape= (56,56,1)。 可能如果您使用的是普通的深度学习模型,那么它不会引发问题,但对于 Convnet 会引发问题。

【讨论】:

【参考方案6】:

问题是input_shape

它实际上应该只包含 3 个维度。并且在内部,keras 将添加批处理维度,使其成为 4。

由于您可能使用了 4 个维度的 input_shape(包括批量),因此 keras 正在添加第 5 个。

你应该使用input_shape=(32,32,1)

【讨论】:

不,这个号码是免费的。例如,Keras 在model.summry() 中将该维度显示为None 我的训练数据维度是数组:(26721, 32, 32) 并且有效。尺寸为(6680,32,32)。现在我明确定义图像大小 (32,32,1) ,然后它给了我错误 ValueError: Error when checking input: expected conv2d_9_input to have 4 dimensions, but got array with shape (6680, 32, 32) 。我也在帖子中编辑了model_fit.generator,你能检查一下吗? 现在问题出在您的数据中。您的数据缺少channel 维度:x_validation = x_validation.reshape(6680,32,32,1) 非常感谢您的帮助 你能在这里帮助我们吗@DanielMöller。 ***.com/questions/64612084/…

以上是关于Keras ValueError: Input 0 is in compatible with layer conv2d_1: expected ndim=4, found ndim=5的主要内容,如果未能解决你的问题,请参考以下文章

Keras:ValueError:检查输入时出错

Keras LSTM ValueError: Input 0 of layer "sequential" is in compatible with the layer: expe

Keras ValueError: Input 0 is in compatible with layer conv2d_1: expected ndim=4, found ndim=5

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

ValueError: Error when checking input: expected input_1 to have 2 dimensions, but got array with sha

ValueError:没有为任何变量提供梯度 - Tensorflow 2.0/Keras