низкая производительность keras lstm - PullRequest
0 голосов
/ 22 мая 2018

Я хочу создать модель lstm для классификации сигналов.

Допустим, у меня есть 1000 файлов сигналов.Каждый файл содержит матрицу формы (500, 5), что означает, что в каждом файле у меня есть 5 объектов (столбцов) и 500 строк.

         0          1          2         3        4
0        5        5.3         2.3       4.2      2.2

...     ...       ...        ...         ...      ...

499     2500      1.2         7.4        6.7       8.6

Для каждого файла есть один выход, который представляет собойлогическое (верно или неверно).форма (1,)

Я создал базу данных, данные с формой (1000, 5, 500), а целевой вектор имеет форму (1000, 1).

ЗатемЯ разделяю данные (X_train, X_test, y_train, y_test).

Можно ли передать такую ​​матрицу в модель lstm?Потому что у меня очень плохая работа.Из того, что я видел, люди дают только 1D или 2D данные, и они изменяют свои данные после того, как дают 3D ввод для слоя lstm.

Код с lstm выглядит следующим образом:

input_shape=(X_train.shape[1], X_train.shape[2]) #(5,500), i.e timesteps and features
model = Sequential()
model.add(LSTM(20, return_sequences=True))
model.add(LSTM(20))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')

Я изменил количество ячеек в слое LSTM и количество слоев, но результат в основном одинаков (0,19).Нормально ли иметь такой плохой счет в моем случае?Есть ли лучший способ пойти?

Спасибо

1 Ответ

0 голосов
/ 22 мая 2018

Преобразуя свои данные в (образцы, 5, 500), вы даете LSTM 5 временных шагов и 500 функций.Судя по вашим данным, вы хотите обработать все 500 строк и 5 элементов каждого столбца, чтобы сделать прогноз.Вход LSTM (сэмплы, временные шаги, функции).Таким образом, если ваши строки представляют собой временные шаги, в которых выполняются 5 измерений, то вам необходимо переставить последние 2 измерения и установить input_shape=(500, 5) в первом слое LSTM.

Кроме того, поскольку ваш вывод является логическим, вы получаете большестабильное обучение с использованием activation='sigmoid' в вашем конечном плотном слое и тренировка с loss='binary_crossentropy для двоичной классификации.

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