为什么我会出现 Keras 形状不匹配的情况?

2024-02-01

我正在遵循一个针对初学者的 Keras mnist 示例。我尝试更改标签以适合我自己的数据,该数据有 3 个不同的文本分类。我正在使用“to_categorical”来实现这一点。形状对我来说看起来不错,但“fit”会出现错误:

train_labels = keras.utils.to_categorical(train_labels, num_classes=3)

print(train_images.shape)
print(train_labels.shape)

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(3, activation=tf.nn.softmax)
])

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

model.fit(train_images, train_labels, epochs=5)

(7074, 28, 28)

(7074, 3)

块引用 块引用 回溯(最近一次调用最后一次):文件 “C:/Users/lawrence/PycharmProjects/tester2019/KeraTest.py”,第 131 行, 在 model.fit(train_images, train_labels, epochs=5) 文件 "C:\Users\lawrence\PycharmProjects\tester2019\venv\lib\site-packages\tensorflow\python\keras\engine\training.py", 第 1536 行,适合 validation_split=validation_split) 文件“C:\Users\lawrence\PycharmProjects\tester2019\venv\lib\site-packages\tensorflow\python\keras\engine\training.py”, 第 992 行,在 _standardize_user_data 中 class_weight,batch_size)文件“C:\Users\lawrence\PycharmProjects\tester2019\venv\lib\site-packages\tensorflow\python\keras\engine\training.py”, 第 1154 行,在 _standardize_weights 中 exception_prefix='target') 文件“C:\Users\lawrence\PycharmProjects\tester2019\venv\lib\site-packages\tensorflow\python\keras\engine\training_utils.py”, standardize_input_data 中的第 332 行 ' 但得到了形状为 ' + str(data_shape)) 的数组) ValueError: 检查目标时出错: 预期 dend_1 具有形状 (1,) 但得到了 形状为 (3,) 的数组


你需要使用categorical_crossentropy代替sparse_categorical_crossentropy作为损失,因为您的标签是一种热编码。

或者,您可以使用sparse_categorical_crossentropy如果您不对标签进行热编码。在这种情况下,标签应该具有形状(batch_size, 1).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我会出现 Keras 形状不匹配的情况? 的相关文章

随机推荐