首页 > 解决方案 > 当训练数据位于多个不同长度时间序列的 csv 文件中时,如何提供 LSTM?

问题描述

我正在运行 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  

问题:

有什么建议可以养活我的网络吗?

标签: pythontensorflowkerastime-serieslstm

解决方案


由于您的数据点具有可变的序列长度,因此您无法一次轻松地训练您的网络。相反,您必须以大小为 1 的小批量进行训练或固定您的序列长度,尽管根据您正在处理的数据,后者可能没有意义。

看看 Keras 函数train_on_batch。使用它,您可以使用每个患者来训练您的模型,尽管使用 1 的批量大小有其自身的问题

至于模型,我建议使用Keras 功能 API。如果您想尝试一些简单的事情,只需使用可变长度和特征大小的输入序列3。这应该给你一个基线,这是我假设你想要的函数名称。像这样的东西:

input_ = Input(shape=(None, 3))
x = LSTM(128)(input_)
output = Dense(1, activation='sigmoid')(x)
model = Model(input_, output)

推荐阅读