#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))
, это сработает, но что произойдет позади и почему, я не знаю.