为什么我会遇到Keras形状不匹配的问题?

时间:2019-02-04 10:01:22

标签: python tensorflow keras

我正在为初学者遵循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)

     

Blockquote   块引用   追溯(最近一次通话):文件   “ 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行,适合       validate_split = validation_split)文件“ C:\ Users \ lawrence \ PycharmProjects \ tester2019 \ venv \ lib \ site-packages \ tensorflow \ python \ keras \ engine \ training.py”,   _standardize_user_data中的第992行       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:检查目标时出错:预期density_1具有形状(1,),但得到   形状为(3,)

的数组

2 个答案:

答案 0 :(得分:1)

由于标签是一种热编码方式,因此您需要使用categorical_crossentropy而不是sparse_categorical_crossentropy作为损失。

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

答案 1 :(得分:0)

使用损失

loss = keras.losses.categorical_crossentropy

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