找到信号的基频
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
。
我有 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
。