使用Keras的LSTM进行可变长度信号的多标签分类

3

我最近开始从事ECG信号分类的工作,将其分为各种类别。它基本上是多标签分类任务(总共4个类)。由于我对深度学习、LSTM和Keras很陌生,所以有些困惑。

  1. 我考虑将归一化的原始信号作为输入提供给网络,这是一个好的做法吗?

  2. 我还需要了解LSTM的训练输入形状,因为ECG信号的长度不定(9000到18000个样本),通常分类器需要固定的可变输入。在LSTM的情况下,我该如何处理这种类型的输入?

  3. 最后,对于这种长输入,深层LSTM网络的结构应该是什么样子,我应该使用多少层?

感谢您的时间。 敬礼!

1个回答

4
我认为将归一化的原始信号作为网络输入是一个好的方法。对于深度学习算法来说,将输入归一化或重新缩放是相当标准的做法。这通常有助于模型更快地收敛,因为现在你已经处于较小的范围内(即[-1,1]),而不是来自原始输入的更大非归一化范围(例如[0,1000])。它还可以帮助您获得更好、更精确的结果,因为它有助于解决梯度消失问题,并更好地适应现代激活和优化器函数。
对于LSTM的训练输入形状我也需要了解,因为ECG信号的长度可变(9000到18000个样本),通常分类器需要固定的变量输入。在LSTM中如何处理此类输入?
这部分非常重要。您是正确的。LSTM希望接收具有固定形状的输入,这是您事先知道的(事实上,任何深度学习层都期望接收固定形状的输入)。如keras文档中所述,它也对递归层进行了说明:
"输入形状 具有形状(batch_size,timesteps,input_dim)的3D张量。"
因此,它期望您的数据具有一定数量的timesteps,并且每个timestep上都有一个维度(batch size通常为1)。例如,假设您的输入数据包含像"[[1,4],[2,3],[3,2],[4,1]]"这样的元素。然后,使用批处理大小为1,您的数据形状将是(1,4,2)。因为你有4个时间步长,每个时间步长都有两个特征。
因此,您必须确保预处理您的数据,使其具有可以传递给LSTM层的固定形状。这个您需要自己找出来,因为您比我们更了解您的数据和问题。也许您可以修复从信号中获得的样本,丢弃一些样本并保留其他样本,以使每个信号具有相同的长度(如果您说您的信号在9k到18k之间,则选择9000可能是合理的选择,从其他信号中丢弃样本)。您甚至可以对数据进行某些转换,以便您可以从9000-18000的输入映射到固定大小。
关于这么多的输入,如何设计深度LSTM网络和应该使用多少层是非常广泛的问题,没有唯一的答案。它将取决于问题的性质,确定这些参数并不那么简单。
我建议您先从一个简单模型开始,并逐步添加层和块(神经元),直到您对结果感到满意。 首先尝试只有一个隐藏层,训练和测试您的模型并检查性能。然后您可以添加更多块并查看性能是否有所改善。您也可以添加更多层并检查同样的情况,直到您满意为止。 这是创建深度学习模型的好方法,因为它可以在保持网络尽可能精简的同时获得您想要的结果,这反过来有助于提高执行时间和复杂度。祝您编码顺利,希望您会发现这个有用。

其次,是直接提供归一化的信号还是从信号中提取特征并将这些特征作为输入?考虑到我的输入大小,哪种方式最好? - Naqvi
@Naqvi,按时间步长计算,它表示您的 ECG 具有“时间”维度。换句话说,在给定的示例中,它是 4,因为数据集的单个元素由该连续信号的四个离散样本组成(巧合的是每个样本都具有两个特征),并且每个样本在每个点上具有不同的电压(或其他单位)。就像信号特定时刻的 4 个“帧”或图片。 - DarkCygnus
那么在你的例子中,我们有两个输入样本,每个样本有四个特征,对吗? - Naqvi
@Naqvi [[1,4],[2,3],[3,2],[4,1]] 这是一个包含 4 个时间步和每个样本 2 个特征的 单一 输入示例。基本上,它是由 4 个样本(时间戳)组成的两个信号。 - DarkCygnus
1
谢谢,现在我基本明白了。我要试一下。 - Naqvi
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接