为啥我得到 Keras 形状不匹配?

Posted

技术标签:

【中文标题】为啥我得到 Keras 形状不匹配?【英文标题】:Why am I getting Keras shape mismatch?为什么我得到 Keras 形状不匹配? 【发布时间】:2019-06-28 01:16:19 【问题描述】:

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

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)

块引用 块引用 Traceback(最近一次调用最后一次):文件 “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”, 第 332 行,在 standardize_input_data 中 ' 但得到了形状为 ' + str(data_shape)) 的数组 ValueError: 检查目标时出错:预期dense_1 的形状为 (1,) 但得到了 形状为 (3,) 的数组

【问题讨论】:

【参考方案1】:

您需要使用categorical_crossentropy 而不是sparse_categorical_crossentropy 作为损失,因为您的标签是热编码的。

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

【讨论】:

谢谢,解决了。我是深度学习的新手,但如果标签不同,我认为 one-hot 很重要。【参考方案2】:

使用损失,

loss = keras.losses.categorical_crossentropy

当目标标签包含多个实例时。

【讨论】:

以上是关于为啥我得到 Keras 形状不匹配?的主要内容,如果未能解决你的问题,请参考以下文章

keras 形状而 UpSampling 不匹配

Python:keras 形状不匹配错误

Keras:密集层和激活层之间的形状不匹配

为啥 keras 测试生成器只返回批量大小作为数组形状的长度?

Recurrentshop 和 Keras:多维 RNN 导致维度不匹配错误

Keras 图像分类:检查输入时出错:预期 input_1 有 4 个维度,但得到了形状为 (6885、7500) 的数组