簡體   English   中英

keras sparse_categorical_crossentropy損失函數輸出形狀不匹配

[英]keras sparse_categorical_crossentropy loss function output shape didn't match

我有一個有3570個標簽的數據集。 當我使用sparse_categorical_crossentropy作為損失函數時,輸出形狀不匹配。

model = Sequential()
model.add(Dense(1024, input_dim=79, activation='relu'))
model.add(Dense(2048, activation='relu'))
model.add(Dense(3570, activation='sigmoid'))

model.compile(loss='sparse_categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])
model.fit(x_train, y_train,
          epochs=10,
          batch_size=1,
          validation_data=(x_valid, y_valid))

輸出是ValueError: Error when checking model target: expected dense_42 to have shape (None, 1) but got array with shape (1055, 3570)

然后我np.expand_dims(y, -1)這個問題#2444並使用np.expand_dims(y, -1)來更改代碼。 但仍有錯誤。

model = Sequential()
model.add(Dense(1024, input_dim=79, activation='relu'))
model.add(Dense(2048, activation='relu'))
model.add(Dense(3570, activation='sigmoid'))

model.compile(loss='sparse_categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])
model.fit(x_train, np.expand_dims(y_train, -1),
          epochs=10,
          batch_size=1,
          validation_data=(x_valid, np.expand_dims(y_valid, -1)))

錯誤ValueError: Error when checking model target: expected dense_45 to have 2 dimensions, but got array with shape (1055, 3570, 1)

我該如何更改代碼?

原始y_train維度是什么?

最有可能的是你的y_train有形狀(1055,)。 您需要將One-Hot代碼y_train轉換為(1055,3570)維度。 然后原始代碼應該工作。 Keras不接受使用多個類的y列的單個列,它必須是One-Hot編碼的。

你可以找到使用以下內容:

from keras.utils.np_utils import to_categorical

y_cat = to_categorical(y, num_classes=None)

loss='sparse_categorical_crossentropy'不適用於單熱編碼,而是適用於整數目標。 您可能需要“Dense(...”作為輸出圖層並直接使用y_train。

暫無
暫無

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

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