TensorFlow CNN 不兼容的形状:4D 输入形状

时间:2021-03-07 06:05:42

标签: python tensorflow keras conv-neural-network

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

  • “[n]”是样本
  • “[31][31]”是数据点数组
  • “[5]”是该数据点内的位数
  • 和“[2]”是位的单热编码(例如,位 1 将是 [1, 0] 和零 [0, 1])

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

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

模型代码如下所示: (使用 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] 输出是 one-hotted,我不确定它们是否可以在仍然被正确解释的情况下变成 [10] 矩阵。还有,有没有什么办法可以让dense layer变成[5][2]?

The full error can be seen here. I felt it would be awfully long to include in rawtext here.

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

1 个答案:

答案 0 :(得分:1)

你的标签形状是 (5,2) 但网络输出是 (10,) 所以这很令人困惑。输出形状和标签形状都应该相同。 使用:

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

在 Dense 层之后。你会没事的