我怎样才能克服 "ValueError: 形状(无,1)和(无,7)不兼容"

问题描述 投票:0回答:1

我是Keras和CNN的新手。我正在做一个任务,建立一个用于预测面部情绪的CNN。我根据任务建立了模型,但在编译模型时,我得到了 "ValueError.Shapes (None, 1) and (None, 7) are incompatible"。Shapes (None, 1) and (None, 7) are incompatible". 谁能帮我解决这个问题?

把我的代码粘贴在下面,供参考。

'''

model = Sequential()

model.add(Conv2D(filters = 64, kernel_size = 5,input_shape = (48,48,1)))
model.add(Conv2D(filters=64, kernel_size=5,strides=(1, 1), padding='valid'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2,2),strides=1, padding='valid'))
model.add(Activation('relu'))

model.add(Conv2D(filters = 128, kernel_size = 5))
model.add(Conv2D(filters = 128, kernel_size=5))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Activation('relu'))

model.add(Conv2D(filters = 256, kernel_size = 5))
model.add(Conv2D(filters = 256, kernel_size=5))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Activation('relu'))

model.add(Flatten())
model.add(Dense(128))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Dense(7,activation='softmax'))

''''然后试着编译''''

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
history = model.fit(input_array, output_array, batch_size = 64, epochs= 20, validation_split=0.10,)

''''这给出了错误''ValueError: Shapes (None, 1) and (None, 7) are incompatible''I am using google colab for this' ''我正在使用google colab''。

python tensorflow keras-layer
1个回答
0
投票

你很有可能使用你的标签稀疏编码,比如[]。0,1,2,3,4,5,6] 而不是一热一码的形式。

你的解决方案有以下几种。

  1. 使用一热编码形式,即把每个标签转化为一个长度== number_of_classes的数组。也就是说,对于0,你将有 [1,0,0,0,0,0,0] 你会有 [0,1,0,0,0,0,0] 等。
  2. sparse_categorical_crossentropy. 如果你使用这个损失函数,OHE步骤是在幕后完成的,你不再需要处理你输入的训练+验证标签。

0
投票

如果你使用一热编码的标签,比如[0, 0, 0, 0, 0, 0, 1],你需要使用 categorical_crossentropy但如果你使用稀疏的标签,如[1, 2, 3, 4, 5, 6, 7],你需要使用 sparse_categorical_crossentropy.

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.