keras中的输出尺寸问题

数据挖掘 喀拉斯 美国有线电视新闻网
2022-03-04 16:47:55

我目前正在尝试使用 keras 构建和训练 CIFAR 数据模型。我的标签应该是一次性编码的。

data.y_train.shape

是 (45000, 10)。我的模型是这样定义的:

model = keras.models.Sequential()
model.add(keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(keras.layers.MaxPooling2D((2, 2)))
model.add(keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(keras.layers.MaxPooling2D((2, 2)))
model.add(keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(64, activation='relu'))
model.add(keras.layers.Dense(10, activation='softmax'))

然而,当我尝试训练模型时,我得到了这个错误:

ValueError: Error when checking target: expected dense_10 to have shape (1,) but got array with shape (10,)

有人知道,为什么尺寸不合适?

1个回答

答案: 错误表明target需要在单行中,即 (1,),如您提供 (10,)

ValueError: Error when checking target: expected dense_10 to have shape (1,) but got array with shape (10,)

解决方案 1: 用于"keras.utils.np_utils.to_categorical"将模型数据标签转换为分类热向量。

from keras.utils import to_categorical
label = array(label_column)
# one hot encode
encoded_label = to_categorical(label)

然后你可以在你的最后一层期望的目标中有 10 个标签。

model.add(keras.layers.Dense(10, activation='softmax'))

解决方案 2:如果上述方法不起作用,则将 CNN 网络的最后一层更改为有一个输出,如下所示。

 model.add(Dense(1, activation='sigmoid'))