我正在尝试构建一个简单的神经网络来识别来自2个人的声音中的14个单词。
我创建了一个火车数据集,其中包含长度为0.5 s(8000 Hz)的2471个文件和一个包含612个文件的测试数据集。
我使用"短时傅立叶变换"像这样:
_, _, d = signal.stft(d, 8000, nperseg=400)
d = numpy.abs(d)
示例文件的频谱图:
这是我的网络:
net = tflearn.input_data(shape=[None, 201, 21])
net = tflearn.max_pool_1d(net, 8)
net = tflearn.conv_1d(net, 128, 6, activation='relu')
net = tflearn.avg_pool_1d(net, 4)
net = tflearn.fully_connected(net, 128, activation='relu')
net = tflearn.dropout(net, 0.6)
net = tflearn.fully_connected(net, 14, activation='softmax')
net = tflearn.regression(net, optimizer='adam', loss='categorical_crossentropy', learning_rate=0.02)
# Train model
model = tflearn.DNN(net)
model.fit(X, Y, n_epoch=12, validation_set=(X_test, Y_test), show_metric=True)
我尝试更改了许多参数,但网络的准确率仍然在90%左右
| Adam | epoch: 011 | loss: 0.34011 - acc: 0.9428 | val_loss: 0.23105 - val_acc: 0.9003
| Adam | epoch: 012 | loss: 0.37237 - acc: 0.9253 | val_loss: 0.22360 - val_acc: 0.9118
在100个时代之后:
| Adam | epoch: 088 | loss: 0.21640 - acc: 0.9753 | val_loss: 0.24923 - val_acc: 0.9297
| Adam | epoch: 099 | loss: 0.48295 - acc: 0.9469 | val_loss: 0.28505 - val_acc: 0.9346
| Adam | epoch: 100 | loss: 0.56168 - acc: 0.9489 | val_loss: 0.24747 - val_acc: 0.9395
500个时代之后:
| Adam | epoch: 485 | loss: 0.20620 - acc: 0.9795 | val_loss: 0.41541 - val_acc: 0.9265
| Adam | epoch: 493 | loss: 0.48699 - acc: 0.9559 | val_loss: 0.23821 - val_acc: 0.9248 -- iter: 4942/4942
| Adam | epoch: 499 | loss: 0.69429 - acc: 0.9501 | val_loss: 0.39483 - val_acc: 0.8987
| Adam | epoch: 500 | loss: 0.87411 - acc: 0.9394 | val_loss: 0.36144 - val_acc: 0.9248
有谁能告诉我我可以改变什么来获得更好的结果?我做错了什么?
增加神经元或时期的数量不会改善结果
答案 0 :(得分:0)
最佳语音体系结构与您尝试的体系结构略有不同。您可能需要试验的内容:数据均值归一化(CMN),递归网络或类似变压器的网络,请注意。有关适当的语音识别体系结构的更多详细信息,您可以最好输入Kaggle Speech Recognition Challenge