我有3个变量x,y,z的数据集。它们是3个不同传感器的读数。这些将作为输入。
当这些传感器找到特定对象时,其读数的相应输出应为1。否则,那里的读数的相应输出应为0。
这是他们找到对象时的示例
这是当他们找不到对象的例子
我想要做的是制作一个神经网络(可能是LSTM)或任何其他方法来接收传感器读数,并告诉传感器是否在寻找对象。
请注意,传感器输出的值通常与图中的值不同,但我注意到的是读数与它们之间的距离之间的相关性。
最好的实现方法是什么?
最佳答案
“最好的”模型是“艺术”。您必须进行测试,直到找到适合自己数据的数据为止。
但基本上,您将输入形状为(examples, time_steps, features)
的输入,其中:examples
=任何值,越多越好time_steps
=每个示例的长度(读数数)features = 3
。
然后,您将创建一个以以下内容开头的模型:
inputs = Input((None, 3)) #variable time_steps, 3 features
您可能会受益于使用这些值的归一化,可能带有批处理归一化层:
outputs = BatchNormalization()(inputs)
outputs = Activation('tanh')(outputs)
然后启动模型的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)
您可能会或可能不会添加额外的分类层,例如:
#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)
最后,加入所有内容:
model = Model(intpus, outputs)
请注意,这只是模型的一个示例。这可能会有所不同(包括分支,池,注意机制等,但是您的问题似乎很简单)。
这里的重要部分是:
了解输入形状
请理解,在上一个LSTM中,您将丢弃“ time_steps”维度。
现在您的问题是2D-
(examples, units_or_features)
请注意,您的最后一层必须只有一个单位。 (因此,每个示例可以返回一个结果)
您的输出数据还必须匹配以下形状:
(examples, 1)
了解最后一次激活应为“ Sigmoid”,因此结果在0到1之间。