Я использую LSTM для анализа настроений, используя несбалансированный набор данных, содержащий 86% положительных образцов и 14% отрицательных образцов. Это очень маленький набор данных из 472 предложений, но они на региональном языке. Коэффициент Train_test_split равен 0,3. У меня две проблемы при реализации:
1: Точность обучения и проверки постоянна на протяжении всего процесса (без SMOTE). 2: При использовании SMOTE для передискретизации y_train показывает только 1 метку в y_train.shape с передискретизацией
from imblearn.over_sampling import SMOTE
ros = SMOTE()
X_train_oversample, y_train_oversample = ros.fit_sample(X_train_pad, y_train)
print(X_train_pad.shape)
print(X_train_oversample.shape)
print(y_train.shape)
print(y_train_oversample.shape)
Результаты для y_train:
X_train_pad.shape (331, 832)
X_train_oversample.shape (570, 832)
y_train.shape (331, **2**)
y_train_oversample.shape (570, **1**)
Однако Фактическая форма данных выглядит следующим образом:
Shape of X_train_pad tensor (331, 832)
Shape of y_train tensor (331, 2)
Shape of X_test_pad tensor (141, 832)
Shape of y_test tensor (141, 2)
Следовательно, обучение LSTM дает сообщение об ошибке
ValueError: Error when checking target: expected dense_1 to have shape (2,) but got array with shape (1,)