ValueError 层序贯_13的输入0与层不兼容:预期ndim = 3,发现ndim = 4收到完整形状:(无,无,无,无)

Posted

技术标签:

【中文标题】ValueError 层序贯_13的输入0与层不兼容:预期ndim = 3,发现ndim = 4收到完整形状:(无,无,无,无)【英文标题】:ValueError Input 0 of layer sequential_13 is incompatible with the layer: expected ndim=3, found ndim=4 Full shape received: (None, None, None, None) 【发布时间】:2021-12-10 07:38:43 【问题描述】:

我正在尝试使用 Simple RNN 来使用 Physionet 数据库预测帕金森的步态。我正在为 RNN 提供高度为 240、宽度为 16 像素的图像。我还使用模型检查点和监控验证准确性来保存最佳权重。在尝试 RNN 的输入形状时,我收到了该错误

 ValueError: Input 0 of layer sequential_13 is incompatible with the layer: expected ndim=3, found ndim=4. Full shape received: (None, None, None, None)

RNN 模型:

model = Sequential()
model.add(SimpleRNN(24, kernel_initializer='glorot_uniform', input_shape=(64,240), return_sequences = True))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(2))
model.add(Activation('softmax'))

opt = optimizers.RMSprop(learning_rate=0.001, decay=1e-6)
epoch=10
early_stopping = EarlyStopping(monitor='val_accuracy', patience=60, verbose=1, mode='auto')
checkpoint = ModelCheckpoint("model_parkinsons.h5", 
                             monitor='val_accuracy', verbose=0, save_best_only=True, 
                             save_weights_only=False, mode='auto', save_freq='epoch')

model.compile(loss='binary_crossentropy',
              optimizer=opt,
              metrics=['accuracy'])

批量大小:64

图片高度:240

a.shape
Output: (64, 16, 240, 1)

我尝试将输入形状输入为 a.shape[1:]

但我得到了预期的错误 3 维但得到了 4 维。

请帮我解决这个问题。

【问题讨论】:

【参考方案1】:

在您的第一层中,您指定了网络的输入形状。此形状不包括您的批量大小。因此,如果您指定“input_shape=(64, 240)”,这意味着您的最终输入需要具有形状 (batch_size, 64, 240)。由于 64 是您的批量大小,看来那里肯定出了问题。此外,您的输入有四个维度:(64, 16, 240, 1),但您的第一层需要三个维度的输入。我不太明白你想用你的模型实现什么,但是如果你在模型中输入 a[:, :, :, 0] 而不是 a. 它应该可以工作。此外,您需要在第一层设置“input_shape=(16, 240)”。如果你做了这两件事,那么你的模型会使用 RNN 一次处理一列图像。这种方法对我来说没有任何意义(因为 RNN 不用于图像处理,至少不是以这种形式),但我没有看到任何其他方式来解释你已经做过的事情。

【讨论】:

以上是关于ValueError 层序贯_13的输入0与层不兼容:预期ndim = 3,发现ndim = 4收到完整形状:(无,无,无,无)的主要内容,如果未能解决你的问题,请参考以下文章

ValueError: 层序贯_1 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2。收到的完整形状:(无,93)

DNN 中的错误:层序贯_10 的输入 0 与层不兼容

ValueError: 层 lstm_12 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=4

ValueError: 层序号_29 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2。收到的完整形状:[无,22]

ValueError: 层 lstm_21 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2。收到的完整形状:(无,546)

ValueError:lstm_45 层的输入 0 与层不兼容:预期 ndim=3,发现 ndim=4。收到的完整形状:(无,无,无,128)