我有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
。
非常感谢任何建议。
回答:
对于新提供的信号,构建神经网络预测基频的最佳方法是什么?
这个问题对于SO来说过于宽泛,因此您不应期望得到任何足够详细且有意义的答案。
尽管如此,您的代码确实存在一些问题,解决这些问题无疑会让您更接近实现最终目标。
因此,您犯了一个非常基本的错误:
准确率只适用于分类问题;对于回归(即数值预测)问题,如您的情况,准确率是没有意义的。
更重要的是,Keras不幸地不会“保护”您或其他用户在代码中提出这种无意义的请求,即您不会得到任何错误或警告,指出您正在尝试一些不合理的事情,比如在回归设置中请求准确率;有关更多细节和实际演示,请参阅我的回答:当损失为均方误差(MSE)时,Keras中定义准确率的函数是什么?。
因此,您的性能指标实际上与您的损失相同,即均方误差(MSE);您应该努力使验证集中的这个量尽可能小,并且完全删除模型编译中的metrics=['accuracy']
参数。
此外,现在我们几乎从不使用tanh
激活函数作为隐藏层的激活函数;您应该尝试使用relu
代替。