Keras信号处理模型



Heyo,我有一个信号处理的模型问题。

上下文:我有一些信号作为浮点存储在numpy数组中,它们都有不同的长度,我需要提取信号在特定时间点的偏移量,问题是我不知道那个点在数组中的位置,所以我不能调整数组的大小(这样所有信号都有相同的长度(。

我有大约8000个已知偏移的信号。所以我想在他们身上训练模型。

我现在有什么

model = Sequential()
model.add(LSTM(256, input_shape=(None,1)))
model.add(Dropout(0.2))
model.add(Dense(1, activation="tanh"))
adam = Adam(lr=0.001)
model.compile(loss='mse', optimizer=adam,metrics=['mse', 'acc'])
  • input_shape=(None,1(,因为我不知道数组的长度
  • activation="tanh"最后一层必须是可以返回负值的东西

基本上,我的模型不应该依赖于长度,应该输出负值和正值。这种模式不适合我的需求,我想知道是否有人能为我指明更好的方向。

"不起作用",因为在1000个周期的训练后,约200个信号/批,100个步骤/周期,输出是"随机的",与实际值相去甚远。

我想用ConvNet代替LSTM。但我不能使用"压扁"或"重塑"。

一个带有numpy savetxt 的信号

-1.118700742721557617e+00
-9.661099910736083984e-01
-9.661099910736083984e-01
-1.088183045387268066e+00
-1.149218797683715820e+00
-1.118700742721557617e+00
-1.088183045387268066e+00
-1.118700742721557617e+00
-1.149218797683715820e+00
-1.088183045387268066e+00
-1.088183045387268066e+00
-1.118700742721557617e+00
-1.179736852645874023e+00
-1.149218797683715820e+00
-1.118700742721557617e+00
-1.149218797683715820e+00
-1.240772962570190430e+00
-1.301809072494506836e+00
-1.240772962570190430e+00
-1.179736852645874023e+00
-1.149218797683715820e+00
-1.240772962570190430e+00
-1.332327008247375488e+00
-1.393362998962402344e+00
-1.362845063209533691e+00
-1.271291017532348633e+00
-1.240772962570190430e+00
-1.362845063209533691e+00
-1.423881053924560547e+00
-1.301809072494506836e+00
-1.088183045387268066e+00
-1.027147054672241211e+00
-1.118700742721557617e+00
-1.240772962570190430e+00
-1.332327008247375488e+00
-1.393362998962402344e+00
-1.332327008247375488e+00
-1.301809072494506836e+00
-1.271291017532348633e+00
-1.210254907608032227e+00
-1.057664990425109863e+00
-9.966289997100830078e-01
-9.966289997100830078e-01
-8.440380096435546875e-01
-5.083401203155517578e-01
-3.252310752868652344e-01
-4.778220653533935547e-01
-7.219660282135009766e-01
-7.219660282135009766e-01
-6.609300374984741211e-01

我不确定"为什么"你认为模型"不起作用"。如果是因为度量,好吧,也许你可以增加层数,使其更强大/更复杂。

但如果原因是其他原因,请在问题中说明。

您可以使用GlobalMaxPooling2DGlobalAveragePooling2D而不是FlattenReshape来构建卷积模型。

在任何模型(包括LSTM模型(中都可以做一件非常有趣的事情,那就是添加当前位置的数据。

例如,如果你的信号长度为3:[s0, s1, s2],你可以添加每个步骤的当前位置,通过形状为(None,2)的输入数据,如:[[s0,0],[s1,1],[s2,2]]

有了这一点,您将帮助您的模型明确地具有绝对和相对位置,而不依赖于非常长的处理。

最新更新