我正在运行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
问题:
有什么建议可以养活我的网络吗?
答案 0 :(得分:2)
由于您的数据点具有可变的序列长度,因此无法轻松地一次训练所有网络。取而代之的是,您必须以1的小批量训练或固定序列长度,尽管基于您正在处理的数据,后者可能没有意义。
看看Keras函数train_on_batch。使用此功能,尽管使用批次大小为1的issues,但可以使用每个患者训练模型。
对于模型,我建议使用Keras functional API。如果要尝试简单的操作,只需使用长度可变且特征尺寸为3
的输入序列。这应该给您一个基准,这是我假设您要从函数名称获得的基准。像这样:
input_ = Input(shape=(None, 3))
x = LSTM(128)(input_)
output = Dense(1, activation='sigmoid')(x)
model = Model(input_, output)
答案 1 :(得分:-2)
lstm_baseline(df[['AIRFLOW','SaO2','ECG']], df['Target'], 64)