Keras 信号处理模型
Keras Signal Processing Model
嘿嘿,我有一些信号处理的模型问题。
上下文:我有一些信号作为浮点数存储在 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" 最后一层必须是可以 return 负的东西。
基本上我的模型不应该依赖于长度,应该输出负值和正值。这个模型不能满足我的需要,我想知道是否有人可以为我指明更好的方向。
"Doesn't work" 在 ~ 200 signals/batch 的 1000 轮训练后,每轮 100 步,输出为 "random" 并且与实际值相差甚远。
我正在考虑使用 ConvNet 而不是 LSTM。但是我不能使用 'Flatten' 或 'Reshape'.
一个带有 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
我不确定 "why" 您是否认为模型 "not working"。如果是因为指标,好吧,也许你可以增加层数,让它更多powerful/complex。
但如果是其他原因,请在问题中说明。
您可以使用 GlobalMaxPooling2D
或 GlobalAveragePooling2D
而不是 Flatten
或 Reshape
来构建卷积模型。
您可以在任何模型(包括 LSTM 模型)中做的一件非常有趣的事情是为当前位置添加数据。
例如,如果您的信号长度为 3:[s0, s1, s2]
,您可以添加每个步骤的当前位置传递形状为 (None,2)
的输入数据,例如:[[s0,0],[s1,1],[s2,2]]
有了这个,您将帮助您的模型明确地具有绝对和相对位置,而无需依赖非常长的处理。
嘿嘿,我有一些信号处理的模型问题。
上下文:我有一些信号作为浮点数存储在 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" 最后一层必须是可以 return 负的东西。
基本上我的模型不应该依赖于长度,应该输出负值和正值。这个模型不能满足我的需要,我想知道是否有人可以为我指明更好的方向。
"Doesn't work" 在 ~ 200 signals/batch 的 1000 轮训练后,每轮 100 步,输出为 "random" 并且与实际值相差甚远。
我正在考虑使用 ConvNet 而不是 LSTM。但是我不能使用 'Flatten' 或 'Reshape'.
一个带有 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
我不确定 "why" 您是否认为模型 "not working"。如果是因为指标,好吧,也许你可以增加层数,让它更多powerful/complex。
但如果是其他原因,请在问题中说明。
您可以使用 GlobalMaxPooling2D
或 GlobalAveragePooling2D
而不是 Flatten
或 Reshape
来构建卷积模型。
您可以在任何模型(包括 LSTM 模型)中做的一件非常有趣的事情是为当前位置添加数据。
例如,如果您的信号长度为 3:[s0, s1, s2]
,您可以添加每个步骤的当前位置传递形状为 (None,2)
的输入数据,例如:[[s0,0],[s1,1],[s2,2]]
有了这个,您将帮助您的模型明确地具有绝对和相对位置,而无需依赖非常长的处理。