ValueError в функции потерь `categorical_crossentropy`: проблема с формой

Я пытаюсь разработать модель распознавания имен (мультиклассов) с биотегированием. У меня есть 9 классов, и я преобразовал их в горячее кодирование. Во время обучения я получил следующую ошибку:

ValueError: Целевой массив формы (2014, 120, 9) был передан для вывода формы (Нет, 9) при использовании в качестве потери categorical_crossentropy. Эта потеря предполагает, что цели будут иметь ту же форму, что и выходные данные.

Мой фрагмент кода:

from keras.utils import to_categorical
y = [to_categorical(i, num_classes=n_tags) for i in y]  ### One hot encoding

input = Input(shape=(max_len,))
embed = Embedding(input_dim=n_words + 1, output_dim=50,
                  input_length=max_len, mask_zero=True)(input)  # 50-dim embedding
lstm = Bidirectional(LSTM(units=130, return_sequences=True,
                           recurrent_dropout=0.2))(embed)  # variational biLSTM
(lstm, forward_h, forward_c, backward_h, backward_c) = Bidirectional(LSTM(units=130, return_sequences=True, return_state=True, recurrent_dropout=0.2))(lstm)  # variational biLSTM
state_h = Concatenate()([forward_h, backward_h])
state_c = Concatenate()([forward_c, backward_c])
context_vector, attention_weights = Attention(10)(lstm, state_h)   ### Attention mechanism  
output = Dense(9, activation="softmax")(context_vector)
model = Model(input, output)
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['categorical_accuracy'])
model.summary()

введите здесь описание изображения

history = model.fit(X,np.array(y), batch_size=32, epochs=15,verbose=1)  
#### Got error message during training

person reshadshuvo123    schedule 14.11.2020    source источник


Ответы (1)


Не используйте одну горячую кодировку и categorical_crossentropy. Вместо этого оставьте вектор y как есть и используйте sparse_categorical_crossentropy. Посмотрите, работает ли это.

См. https://stackoverflow.com/a/50135466/14337775

person Lawhatre    schedule 15.11.2020