使LSTM从3个变量的相关性中学习

Eur*_*oka 1 machine-learning deep-learning lstm keras tensorflow

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

当这些传感器找到特定对象时,其读数的相应输出应为1。否则,那里的读数的相应输出应为0。

这是他们找到对象时的示例 这是他们找到对象时的示例

这是当他们找不到对象的例子 在此处输入图片说明

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

最好的实现方法是什么?

Dan*_*ler 5

“最好的”模型是“艺术”。您必须进行测试,直到找到适合自己数据的数据为止。

但基本上,您将获得带有shape的输入(examples, time_steps, features),其中:

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

然后,您将创建一个以以下内容开头的模型:

inputs = Input((None, 3)) #variable time_steps, 3 features   
Run Code Online (Sandbox Code Playgroud)

您可能会受益于使用这些值的归一化,可能与批处理归一化层配合使用:

outputs = BatchNormalization()(inputs)
outputs = Activation('tanh')(outputs)
Run Code Online (Sandbox Code Playgroud)

然后启动模型的LSTM部分(层数取决于您的测试)

#any number of layers similar to this (this can also be 0)
outputs = LSTM(units, return_sequences=True, activation='tanh')(outputs)

#the last LSTM layer
outputs = LSTM(units, return_sequences=False, activation='tanh')(outputs)
Run Code Online (Sandbox Code Playgroud)

您可能会或可能不会添加额外的分类层,例如:

#any number of classification layers, including 0
outputs = Dense(units)(outputs)
outputs = BatchNormalization()(outputs)
outputs = Activation('relu')(outputs)

#last classification:
outputs = Dense(1)(outputs)
outputs = BatchNormalization()(outputs)
outputs = Activatoin('sigmoid')(outputs)
Run Code Online (Sandbox Code Playgroud)

最后,加入所有内容:

model = Model(intpus, outputs)
Run Code Online (Sandbox Code Playgroud)

请注意,这只是模型的一个示例。这可能会有所不同(包括分支,池,注意机制等,但是您的问题似乎很简单)。

这里的重要部分是:

  • 了解输入形状
  • 请理解,在上一个LSTM中,您将丢弃“ time_steps”维度。
    • 现在您的问题是2D- (examples, units_or_features)
  • 请注意,您的最后一层必须只有一个单位。(因此,每个示例可以返回一个结果)
    • 您的输出数据还必须匹配以下形状: (examples, 1)
  • 了解最后一次激活应该是“ Sigmoid”,因此结果在0到1之间。