У меня проблема классификации текстов с пометкой Multi class с 2000 разными метками. Выполнение классификации с использованием LSTM с перчаткой.
- Кодировщик меток целевой переменной
- слой LSTM с вложенным слоем
- Метрика ошибки - оценка F2
Целевая переменная LabelEncoded:
le = LabelEncoder()
le.fit(y)
train_y = le.transform(y_train)
test_y = le.transform(y_test)
Сеть LSTM такая же, как и ниже, с вложенными перчатками
np.random.seed(seed)
K.clear_session()
model = Sequential()
model.add(Embedding(max_features, embed_dim, input_length = X_train.shape[1],
weights=[embedding_matrix]))#,trainable=False
model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(num_classes, activation='softmax'))
model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy')
print(model.summary())
Моя метрика ошибки - оценка Ф1. Я строю ниже функцию для метрики ошибки
class Metrics(Callback):
def on_train_begin(self, logs={}):
self.val_f1s = []
self.val_recalls = []
self.val_precisions = []
def on_epoch_end(self, epoch, logs={}):
val_predict = (np.asarray(self.model.predict(self.validation_data[0]))).round()
val_targ = self.validation_data[1]
_val_f1 = f1_score(val_targ, val_predict)
_val_recall = recall_score(val_targ, val_predict)
_val_precision = precision_score(val_targ, val_predict)
self.val_f1s.append(_val_f1)
self.val_recalls.append(_val_recall)
self.val_precisions.append(_val_precision)
print("— val_f1: %f — val_precision: %f — val_recall %f" % (_val_f1, _val_precision, _val_recall))
return
metrics = Metrics()
Модель подходит
model.fit(X_train, train_y, validation_data=(X_test, test_y),epochs=10, batch_size=64, callbacks=[metrics])
Ошибка ниже, после 1-й эпохи:
ValueError: Classification metrics can't handle a mix of multiclass and continuous-multioutput targets
Подскажите, пожалуйста, где я допустил ошибку в своем коде?
Я много пытался разрешить себя, но я не получил никакой подсказки. Можете ли вы помочь мне в этом