python - 当训练数据位于多个不同长度时间序列的 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
问题:
有什么建议可以养活我的网络吗?
解决方案
由于您的数据点具有可变的序列长度,因此您无法一次轻松地训练您的网络。相反,您必须以大小为 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)
推荐阅读
- r - 如何自动找到多个变量的偏相关
- debugging - 如何使用 gdb 调试 gtk 应用程序?
- android - 如何在 Android 项目中找到未使用的依赖项?
- c - nRF52 与 PCA9685
- postgresql - 锁定分区父表
- windows - 您可以通过批处理将命令传递到正在运行的程序中吗?
- php - 当我放置文件夹地址而不是 URL 时,unserialize() php 函数没有转换
- reactjs - 将 CSS 转换为样式化组件问题
- python - 使用 Python 在 Raspberry Pi 上打开程序?
- hadoop - 通过 hadoop FileSystem api 访问 Azure Storage Emulator