让LSTM学习3个变量的相关性

我有一个包含3个变量x、y、z的数据集,它们是3个不同传感器的读数。这些将作为输入。

当这些传感器发现特定对象时,它们的读数对应的输出应为1。否则,它们的读数对应的输出应为0。

这是发现对象时的示例 这是发现对象时的示例

这是未发现对象时的示例enter image description here

我想做的是构建一个神经网络(可能是LSTM)或其他任何方法,接收传感器的读数,并判断它们是否找到了对象。请注意,传感器输出的值通常与图中不同,但我注意到读数之间的相关性和它们之间的距离。

实现这一点的最佳方法是什么?


回答:

“最佳”模型是“艺术”。你必须反复测试,直到找到一个适合你的数据的模型。

但基本上,你的输入形状将是 (examples, time_steps, features),其中:

  • examples = 任何值,越多越好
  • time_steps = 每个示例的长度(读数数量)
  • features = 3

然后你将创建一个以以下方式开始的模型:

inputs = Input((None, 3)) #变量time_steps,3个特征   

你可能会从标准化这些值中受益,可能使用批量标准化层:

outputs = BatchNormalization()(inputs)outputs = Activation('tanh')(outputs)

然后开始模型的LSTM部分(层数取决于你的测试)

#任何数量的类似层(这也可以是0)outputs = LSTM(units, return_sequences=True, activation='tanh')(outputs)#最后的LSTM层outputs = LSTM(units, return_sequences=False, activation='tanh')(outputs)

你可以选择添加或不添加额外的分类层,例如:

#任何数量的分类层,包括0outputs = Dense(units)(outputs)outputs = BatchNormalization()(outputs)outputs = Activation('relu')(outputs)#最后的分类:outputs = Dense(1)(outputs)outputs = BatchNormalization()(outputs)outputs = Activatoin('sigmoid')(outputs)

最后,将所有部分组合起来:

model = Model(intpus, outputs)

请注意,这只是一个模型示例。这可能会有很大变化(包括分支、池化、注意力机制等,但你的问题似乎足够简单)。

这里的关键部分是:

  • 理解输入形状
  • 理解在最后的LSTM中你会丢弃“time_steps”维度。
    • 现在你的问题是2D的 – (examples, units_or_features)
  • 理解你的最后一层必须只有一个单元。(这样它可以为每个示例返回一个结果)
    • 你的输出数据也必须匹配这个形状:(examples, 1)
  • 理解最后的激活函数应为’sigmoid’,这样结果在0和1之间。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注