如何将一个标签应用于 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
是因为第一个维度应该是样本数,并且x
和y
需要相同。在您的示例中,情况并非如此。您需要 datax
才能具有 (32086, 560, 560)
的形状,并且 datay
应该是 (32086,)
.
查看 this example 并注意 60000 张训练图像的形状 (60000, 28, 28)
。
我还怀疑您的代码中还存在一些错误:
- 您确定要
Conv1D
层而不是 Conv2D
层吗?也许 this example 会提供信息。
- 由于您使用的是二元交叉熵损失,因此您的最后一层应该只有一个输出而不是两个。
我目前正在使用 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
是因为第一个维度应该是样本数,并且x
和y
需要相同。在您的示例中,情况并非如此。您需要 datax
才能具有 (32086, 560, 560)
的形状,并且 datay
应该是 (32086,)
.
查看 this example 并注意 60000 张训练图像的形状 (60000, 28, 28)
。
我还怀疑您的代码中还存在一些错误:
- 您确定要
Conv1D
层而不是Conv2D
层吗?也许 this example 会提供信息。 - 由于您使用的是二元交叉熵损失,因此您的最后一层应该只有一个输出而不是两个。