我是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''。
你很有可能使用你的标签稀疏编码,比如[]。0,1,2,3,4,5,6]
而不是一热一码的形式。
你的解决方案有以下几种。
[1,0,0,0,0,0,0]
你会有 [0,1,0,0,0,0,0]
等。sparse_categorical_crossentropy
. 如果你使用这个损失函数,OHE步骤是在幕后完成的,你不再需要处理你输入的训练+验证标签。如果你使用一热编码的标签,比如[0, 0, 0, 0, 0, 0, 1],你需要使用 categorical_crossentropy
但如果你使用稀疏的标签,如[1, 2, 3, 4, 5, 6, 7],你需要使用 sparse_categorical_crossentropy
.