如何将一个标签应用于 Keras 神经网络的 NumPy 维度?

How to apply one label to a NumPy dimension for a Keras Neural Network?

我目前正在使用 Keras 开发一个简单的神经网络,但我 运行 遇到了标签问题。网络正在做出二元选择,因此,我的标签都是 1 和 0。我的数据由 3d NumPy 数组组成,基本上是来自一堆图像的像素数据。它的形状是 (560, 560, 32086)。但是,由于前两个维度只是像素,我不应该为每个维度分配一个标签,所以我尝试制作形状为 (1, 1, 32086) 的标签数组,以便每个图像只有 1 个标签。但是,当我尝试使用以下代码对其进行编译时:

model = Sequential(
    [
        Rescaling(1.0 / 255),
        Conv1D(32, 3, input_shape=datax.shape, activation="relu"),
        Dense(750, activation='relu'),
        Dense(2, activation='sigmoid')
    ]
)
model.compile(optimizer=SGD(learning_rate=0.1), loss="binary_crossentropy", metrics=['accuracy'])
model1 = model.fit(x=datax, y=datay, batch_size=1, epochs=15, shuffle=True, verbose=2)

我收到此错误“ValueError:数据基数不明确: x 尺寸:560 y尺寸:1 确保所有数组包含相同数量的样本。”我假设这意味着标签必须与输入数据大小相同,但这对于每个像素都有单独的标签没有意​​义。

数据是通过 for 循环收集的,循环遍历目录中的文件并读取它们的像素数据。然后我将其添加到 NumPy 数组并将其对应的标签添加到标签数组。对此问题的任何帮助将不胜感激。

出现ValueError是因为第一个维度应该是样本数,并且xy需要相同。在您的示例中,情况并非如此。您需要 datax 才能具有 (32086, 560, 560) 的形状,并且 datay 应该是 (32086,).

查看 this example 并注意 60000 张训练图像的形状 (60000, 28, 28)

我还怀疑您的代码中还存在一些错误:

  1. 您确定要 Conv1D 层而不是 Conv2D 层吗?也许 this example 会提供信息。
  2. 由于您使用的是二元交叉熵损失,因此您的最后一层应该只有一个输出而不是两个。