找到信号的基频

Find fundamental frequency of signal

我有 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
我很感激任何建议。

您可以先对数据进行 FFT,使用或不使用 window,然后使用 FFT 幅度向量作为 ML 训练数据向量。

What is the best approach to build a neural network to predict fundamental frequency for newly provided signal?

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

也就是说,您的代码存在某些问题,纠正这些问题可以说会让您离实现最终目标更近一步。

所以,你犯了一个非常的根本错误:

accuracy只适用于分类问题;对于像你这样的回归(即数字预测),准确性毫无意义

更重要的是,不幸的是,Keras 不会 "protect" 您或任何其他用户将此类无意义的请求放入您的代码中,即您不会收到任何错误,甚至不会收到警告正在尝试一些没有意义的事情,例如要求回归设置中的准确性;请参阅我在 中的回答以获取更多详细信息和实际演示。

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

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