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)。
【讨论】:
而不仅仅是发布简短的 cmetsyou 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 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