首页 > 解决方案 > TensorFlow CNN 不兼容的形状:4D 输入形状

问题描述

我有以下形式的样本数据: Data[n][31][31][5][2] 与:

输出旨在是 [5][2] 或 [10] 值数组,这些值针对另一个 [5][2] 或 [10] 数组进行验证。尝试构建模型时,出现以下错误:

 "ValueError: Shapes (None, 5, 2) and (None, 10) are incompatible"

模型代码如下所示:(with train_m[n][31][31][5][2], tr_m[5][2], check_m[n][31][31][5][2] , cr_m[5][2] 是训练数据和预期输出,然后是验证数据和预期输出。)

model = Sequential([
    Conv2D(num_filters, filter_size, input_shape=(31, 31, 5, 2)),
    Flatten(),
    Dense(10, activation='relu'),
])


model.compile(
  'adam',
  loss='categorical_crossentropy',
  metrics=['accuracy'],
)

model.summary()
model.fit(
    train_m,
    tr_m,
    epochs=(100),
    validation_data=(check_m, cr_m),
    verbose=0
)

由于 [5][2] 输出是单一的,我不确定它们是否可以在被正确解释的同时被制成 [10] 矩阵。此外,是否有任何方法可以使密集层成为 [5][2]?

完整的错误可以在这里看到。我觉得在这里包含在 rawtext 中会非常长。

如果还有什么需要,请告诉我——我对使用 TensorFlow 还是很陌生。

标签: pythontensorflowkerasconv-neural-network

解决方案


您的标签形状是 (5,2) 但网络输出是 (10,) 所以这很混乱。输出形状和标签形状都应该相同。利用:

tf.keras.layers.Reshape((5,2))

在密集层之后。你会没事的


推荐阅读