Почему LSTM RNN может возвращать одинаковые метки классификации для любых данных временных рядов? - PullRequest
0 голосов

Обучение LSTM RNN на помеченных данных временных рядов (3 целочисленных метки: 2, 1 и 0). Я получил потерю проверки ~ 0,46 и проверку sparse_categorical_accuracy ~ 0,88. Но когда я делаю прогноз по тому же набору данных, я получаю ТОЛЬКО 1 для всего набора данных целом .

Data and classifier screenshot

Я пробовал:

  • масштабирование данных с помощью StandardScaler (). Fit_transform (X) - без результата
  • изменение оптимизатора и функции активации - результаты равны нулю, единицам или нулям для всего набора данных
  • увеличение или уменьшение количества нейронов, даже радикально - безрезультатно
  • увеличение количества эпох
  • добавление BatchNormalization (), выпадение, регуляризатор L2, еще один скрытый LSTM или плотный слой

Ничего не помогает.

X образец:

[[ 4.98   4.96   4.97  ...  5.09   5.11   4.99 ]
 [ 4.96   4.97   4.86  ...  5.11   4.99   5.05 ]
 [ 4.97   4.86   5.    ...  4.99   5.05   5.01 ]
 ...
 [15.077 15.113 15.236 ... 15.051 14.919 14.94 ]
 [15.113 15.236 15.218 ... 14.919 14.94  14.681]
 [15.236 15.218 15.225 ... 14.94  14.681 14.616]]

Обратите внимание, что StandardScaler ничего не меняет.

у образца:

[1 1 2 ... 0 1 1]

создание модели

model = Sequential()
model.add(LSTM(100, activation='relu', input_shape=(X.shape[1], 1)))
model.add(Dense(3, activation='softmax'))
model.compile(optimizer='Adam', loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy'])

примерка модели

model.fit(X, y, epochs=50, validation_split=0.2)
Epoch 34/50
 - 5s - loss: 0.5037 - sparse_categorical_accuracy: 0.8590 - val_loss: 0.4588 - val_sparse_categorical_accuracy: 0.8769

Получение прогноза по тренировочным данным

predicted = model.predict_classes(X)

Результат:

[1 1 1 ... 1 1 1]

Original classification and predicted data Только для целых данных, хотя я ожидаю по крайней мере каким-то образом результатов, аналогичных " y " ...

Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...