我的问题:
我用 deeplearning4j 实现了一个前馈模型和一个循环模型来检测一维信号中的异常。 也许我缺少一个抽象,但我认为我可以通过以下方式解决这个问题:
- 预处理数据。我有 5 种不同的故障类别,每个类别有大约 40 个示例。 每次失败都有自己的"结构"。
- 构建一个具有 5 个输出神经元的神经网络,每个失败一个。
- 训练和评估。
- 现在我想用真实数据测试我的网络,它应该在一个很长的1D中检测到异常 信号。这个想法是,网络应该以某种方式"迭代"信号并检测这些故障。 在其中。
这种方法可能吗?你有什么想法吗?
提前感谢!
这取决于这些缺陷的结构是什么样子的。
鉴于您有一个一维信号,我希望您的示例是一系列数据,实际上是连续信号的窗口。
有多种方法可以对该问题进行建模:
滑动窗口
如果所有示例的长度相同,则此方法有效。在这种情况下,您可以创建一个正常的前馈网络,该网络仅采用固定数量的步数作为输入并返回单个分类。
如果你的真实数据没有足够的数据,你可以填充它,如果它的数据比示例长度多,那么你滑过序列(例如,当窗口大小为2时,序列abcd变成[ab],[bc],[cd],你会得到3个分类(。
据我所知,DL4J中没有开箱即用的东西可以实现此解决方案。但另一方面,使用RecordConverter.toRecord
和RecordConverter.toArray
将真实数据转换为 NDArray 自行实现它应该不会太难。
循环网络
使用循环网络,您可以将神经网络应用于任意长度的序列数据。如果您要查找的故障在信号中可能具有不同的长度,则这可能是您的选择。
循环网络可以有一个内部状态,在推理期间每次调用时都会更新,并且它将在信号的每一步之后生成分类。
适合您的解决方案将完全取决于您的实际具体用例。