Обучение LSTM RNN на помеченных данных временных рядов (3 целочисленных метки: 2, 1 и 0). Я получил потерю проверки ~ 0,46 и проверку sparse_categorical_accuracy ~ 0,88. Но когда я делаю прогноз по тому же набору данных, я получаю ТОЛЬКО 1 для всего набора данных целом .
Я пробовал:
- масштабирование данных с помощью 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]
Только для целых данных, хотя я ожидаю по крайней мере каким-то образом результатов, аналогичных " y " ...
Что я делаю не так?