почему целевой массив имеет форму (32, 124403) вместо (32, 5)?

#python #keras #text-classification

Вопрос:

Я хочу обучить модель классификации некоторых последовательностей текста по 5 категориям.

 model = Sequential()
model.add(Embedding(input_dim=num_unique_words, output_dim=128))

model.add(Bidirectional(LSTM(64)))
                
model.add(Dense(5))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
model.summary()
 

Выходы:

 _________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding_10 (Embedding)     (None, None, 128)         15923584  
_________________________________________________________________
bidirectional_3 (Bidirection (None, 128)               98816     
_________________________________________________________________
dense_14 (Dense)             (None, 5)                 645       
_________________________________________________________________
activation_1 (Activation)    (None, 5)                 0         
=================================================================
Total params: 16,023,045
Trainable params: 16,023,045
Non-trainable params: 0
 

И это model.fit() :

 history = model.fit(
train_sequence,
epochs=1,
#callbacks=callbacks_list,
validation_data=valid_sequence,
workers=11)
 

и я получаю эту ошибку:

Ошибка значения: Целевой массив с формой (32, 124403) был передан для вывода формы (Нет, 5) при использовании в качестве потери categorical_crossentropy . Эта потеря предполагает, что цели будут иметь ту же форму, что и результат.

nb:

  • batchSize = 32
  • num_unique_words = 124403

Комментарии:

1. Потому что вы не добавили Ровный слой перед плотным

2. Я добавлял его раньше, но та же ошибка вызывает; model.add(Flatten()) model.add(Dense(5))

3. Ах, похоже, что ваш целевой массив имеет неправильную форму, почему ваши цели (32, 124403)?

4. Я не знаю, и это одна из вещей, которые мешают моему пониманию.

5. если я помещу num-unique_words в последний плотный слой model.add(Dense(num_unique_words)) , это сработает, но что произойдет позади и почему, я не знаю.