Как кормить LSTM, когда обучающие данные находятся в нескольких CSV-файлах временных рядов различной длины? - PullRequest
0 голосов
/ 20 февраля 2019

Я использую LSTM для классификации медицинских записей для каждого пациента.При этом для каждого пациента (наблюдения) у меня есть один файл CSV.Весь набор данных состоит из нескольких файлов CSV, каждый из которых представляет собой DataFrame временного ряда. Это не так очевидно, потому что есть одна небольшая разница между подачей LSTM с изображениями и временными рядами, это РАЗМЕР последовательностей.CNN предполагает, что входы имеют одинаковый размер, но здесь у нас есть входы с различной длиной

Вопрос:

Каккормить LSTM в этом случае?

Я уверен, что если вы знакомы с классификацией изображений, вы можете помочь с моим вопросом, но это не просто тот же подход.

Пример

Для одного пациента у меня есть DataFrame, в котором есть все записи, которые я хочу использовать в моем LSTM.

df.shape
Out[29]: (5679000, 4) 
# The 5679000 change from one patient to another but 4 columns are fixed

Посмотрите здесь:

df.head(4)

Out[30]: 

   AIRFLOW     SaO2    ECG  Target  
0    -34.0  31145.0  304.0     0.0  
1    -75.0  31145.0  272.0     0.0  
2    -63.0  31145.0  254.0     0.0  
3    -57.0  31145.0  251.0     1.0  
4    -60.0  31145.0  229.0     0.0  

Проблема:

Любые предложения по питанию моей сети?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Поскольку ваши точки данных имеют переменную длину последовательности, вы не можете легко обучить всю сеть сразу.Вместо этого вы должны тренироваться в мини-пакетах размера 1 или фиксировать длину последовательности, хотя последние, вероятно, не имеют смысла, основываясь на данных, с которыми вы имеете дело.

Посмотрите на функцию Keras train_on_batch .Используя это, вы можете тренировать свою модель, используя каждого отдельного пациента, хотя использование партии размером 1 имеет свои проблемы .

Что касается модели, я бы предложил использовать функциональный API Keras .Если вы хотите попробовать что-то простое, просто используйте входную последовательность переменной длины и размер элемента 3.Это должно дать вам базовый уровень, который, как я полагаю, вы хотите получить от имени своей функции.Примерно так:

input_ = Input(shape=(None, 3))
x = LSTM(128)(input_)
output = Dense(1, activation='sigmoid')(x)
model = Model(input_, output)
0 голосов
/ 20 февраля 2019

lstm_baseline(df[['AIRFLOW','SaO2','ECG']], df['Target'], 64)

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