查找信号的基频

时间:2019-03-13 10:18:29

标签: machine-learning keras deep-learning signal-processing conv-neural-network

我有1000个数据集,每个数据集包含8000个信号幅度和一个标签-该信号的基本频率。建立神经网络以预测新提供的信号的基频的最佳方法是什么?

例如:
基本频率:75.88206932 Hz
数据片段:

 -9.609272558949627507e-02
 -4.778297441391140543e-01
 -2.434520972570237696e-01
 -1.567176020112603263e+00
 -1.020037056101358752e+00
 -1.129608807811322446e+00
  4.303651786855859918e-01
 -3.936956061582048694e-01
 -1.224883726737033163e+00
 -1.776803300708089672e+00

我创建的模型:(训练集形状:(600,8000,1)

  model=Sequential() 
  model.add(Conv1D(filters=64, kernel_size=3, activation='tanh', \
                    input_shape=(data.shape[1],data.shape[2]))) 
  model.add(MaxPooling1D(pool_size=2)) 
  model.add(Conv1D(filters=64, kernel_size=3, activation='tanh')) 
  model.add(MaxPooling1D(pool_size=2)) 
  model.add(Conv1D(filters=64, kernel_size=3, activation='tanh')) 
  model.add(MaxPooling1D(pool_size=2)) 
  model.add(Flatten())
  model.add(Dense(500, activation='tanh'))
  model.add(Dropout(0.2))
  model.add(Dense(50, activation='tanh'))
  model.add(Dropout(0.2))
  model.add(Dense(1, activation='linear')) 

  model.compile(loss='mean_squared_error', optimizer='adam', metrics=["accuracy"])

但是该模型不想训练。准确性~ 0.0
我非常感谢任何建议。

2 个答案:

答案 0 :(得分:0)

您可以首先对有或没有窗口的数据进行FFT,然后将FFT幅度向量用作ML训练数据向量。

答案 1 :(得分:0)

  

建立神经网络进行预测的最佳方法是什么   新提供的信号的基本频率?

对于SO来说,这是一个过于宽泛的问题,因此,您不应真正期待任何足够详细的有意义的答案。

也就是说,您的代码中存在某些问题,纠正这些问题可以使您更进一步地实现最终目标。

因此,您犯了一个非常基本错误:

精度仅适用于分类问题;对于诸如您这样的回归(即数字预测)而言,准确性是毫无意义的

此外,事实是,不幸的是Keras不会“保护”您或任何其他用户不要在您的代码中提出这种毫无意义的请求,即您不会得到任何错误,甚至不会警告您正在尝试执行以下操作:毫无意义,例如要求回归设置的准确性;有关更多详细信息和实际演示,请参见What function defines accuracy in Keras when the loss is mean squared error (MSE)?中的答案。

因此,这里的性能指标实际上与损失相同,即均方误差(MSE);您应该尽量减少验证集中的数量,并从模型的编译中完全删除metrics=['accuracy']参数。

此外,如今,我们几乎从未对隐藏层使用tanh激活;您应该尝试使用relu