Модель LSTM (в Керасе) с разным количеством строк для каждого входа - PullRequest
0 голосов
/ 26 апреля 2018

Поэтому я пытаюсь приспособить простую модель LSTM в Керасе.

Мои данные выглядят так:

Student ID, feature1,feature2,feature3, feature..21 time,labely
1,  some value , some value, some value,time1,..,  y1
1,  some value , some value, some value,time2,..,  y2
1,  some value , some value, some value,time3,..,  y1
1,  some value , some value, some value,time4,..,  y1
2,  some value , some value, some value,time1,..,  y1
2,  some value , some value, some value,time2,..,  y2
3,  some value , some value, some value,time1,..,  y1
3,  some value , some value, some value,time2,..,  y2 
3,  some value , some value, some value,time3,..,  y1

Так что для каждого ученика у меня разное количество наблюдений, как вы можетеЯ хочу построить LSTM, который запоминает последовательность наблюдений, чтобы предсказать метку y.Число функций фиксировано = 21.

Я новичок в LSTM, и у меня возникают следующие проблемы, связанные с измерениями данных:

Проблема 1: Мой формат ввода:

X[0]:
[array([[  0.00000000e+00,   0.00000000e+00,   0.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   8.34490000e+04],
       [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   8.34490000e+04],
       [  0.00000000e+00,   0.00000000e+00,   1.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   8.34490000e+04],
       ...,
       [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   7.11650000e+04],
       [  0.00000000e+00,   0.00000000e+00,   1.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   7.11650000e+04],
       [  0.00000000e+00,   0.00000000e+00,   1.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   7.11650000e+04]], dtype=float32)]

Мой выходной формат:

y[0],y[1]:
 [array([  1.,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
        nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,   0.,  nan,   0.,
        nan,  nan,  nan,  nan,  nan,   1.,  nan,  nan,   1.,   1.,  nan,
        nan,  nan,  nan,   1.,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
        nan], dtype=float32)
 array([ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
        nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
        nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
        nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
        nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
        nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
        nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
        nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
        nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
        nan,  nan,  nan,  nan,  nan,  nan,   0.,  nan], dtype=float32)]]

Вывод np.shape дает мне (19,) для y и (33,) для x.Я не могу преобразовать его в 3D-массив.

Проблема 2: мой lstm находится в

https://codeshare.io/5zv4ok

Я получаю следующую ошибку:

ValueError: Ошибка при проверке ввода: ожидалось, что lstm_1_input будет иметь 3 измерения, но получил массив с формой (19, 1)

Я хочу знать, как продолжить работу с моей моделью.Я также не совсем понимаю, как установить параметр шага по времени, поскольку он варьируется для каждого учащегося.

1 Ответ

0 голосов
/ 26 апреля 2018

Keras нужен один многомерный массив, чтобы превратить его в тензор (в тензорном потоке или любом другом используемом вами бэкэнде).Поэтому, как правило, невозможно назвать соответствие различным переменным димеснионам, кроме batch_size.

  1. Существует несколько возможных решений вашей проблемы: вы можете дополнить свою последовательность нулями, чтобы каждый образец имел одинаковую последовательность len (самое простое решение)
  2. Вы можете сортировать свои сэмплы партиями, в которых каждая партия имеет определенную последовательность len, а затем подавать ее в свои сети
  3. Обучать свою модель с помощью batch_size = 1
...