簡體   English   中英

我該如何克服“ValueError:形狀 (None, 1) 和 (None, 7) 不兼容”

[英]how can I overcome “ValueError: Shapes (None, 1) and (None, 7) are incompatible”

我是 Keras 和 CNN 的新手。 我正在做一個任務來構建一個用於預測面部情緒的 CNN。 我根據分配構建了 model,但是在編譯 model 時,我得到“ValueError:形狀(無,1)和(無,7)不兼容”。 有人可以幫我解決這個問題嗎?

在下面粘貼我的代碼以供參考:

'''

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' '我正在為此使用google colab'

您很可能使用稀疏編碼的標簽,例如 [ 0,1,2,3,4,5,6]而不是單熱編碼形式。

您的解決方案是從以下選項之一中進行選擇:

  1. 使用 one-hot-encoded 形式,即將每個 label 轉換為長度 == number_of_classes 的數組。 也就是說,對於 0,您將擁有[1,0,0,0,0,0,0]對於 1 您將擁有[0,1,0,0,0,0,0]等。
  2. 使用sparse_categorical_crossentropy 如果您使用此損失函數,則 OHE 步驟在幕后完成,您不再需要處理輸入訓練 + 驗證標簽。

如果您對 label 使用單熱編碼,例如 [0, 0, 0, 0, 0, 0, 1],則需要使用categorical_crossentropy ,但如果您使用稀疏 label,例如 [1, 2, 3, 4, 6, 7] 你需要使用sparse_categorical_crossentropy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM