ValueError: Shapes (None, 1) and (None, 43) are incompatible
ValueError: Shapes (None, 1) and (None, 43) are incompatible
导读
本文意在提供解决此类方法的一个方法,仅参考,并非完全适用于你们所处困境,希望这篇能帮到你。
代码如下
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
epochs = 15
# batch_size=64/32
history = model.fit(X_train, y_train, batch_size=32, epochs=epochs, validation_data=(X_test, y_test))
本人报错如下
分析得出:问题出在 损失函数的选择,因为我的label编码是数字编码,若采用categorical_crossentropy,则需要在image_dataset_from_directory中设置label_mode=‘categorical’。默认情况下,image_dataset_from_directory方法假定标签编码为整数(label_mode=‘int’)。
通常CategoricalCrossentropy是适用于目标是 one-hot 编码,而SparseCategoricalCrossentropy才是适用于数字编码目标。
我采用的解决方法为重新选择损失函数 SparseCategoricalCrossentropy
1.sparse_categorical_crossentropy
label数组中的数据全为0-9,表示十种分类。
2.categorical_crossentropy
当labe使用one-hot编码时,使用categorical_crossentropy。例如 伦敦 [1, 0, 0, 0, 0, 0],巴黎[0, 1, 0, 0, 0, 0],纽约[0, 0, 1, 0, 0, 0]…