python - 如何在keras中使用一维卷积神经网络解决音频信号问题

标签 python numpy tensorflow keras conv-neural-network

PS,我已经更改了模型,但效果不佳(64%)

我有一个数据集(它是给定的,不是问题)。

all_speakers = np.unique([os.path.basename(i).split('_')[1] for i in fsdd])
np.random.shuffle(all_speakers)
train_speakers = all_speakers[:2]
test_speakers = all_speakers[2:]
print("All   speakers:", all_speakers)
print("Train speakers:", train_speakers)
print("Test  speakers:", test_speakers)

train_files = [
    i for i in fsdd if os.path.basename(i).split('_')[1] in train_speakers
]
test_files = [i for i in fsdd if i not in train_files]

train = create_audio_dataset(train_files, training=True)
test = create_audio_dataset(test_files, training=False)

结果是:

All speakers: ['nicolas' 'theo' 'jackson']

Train speakers: ['nicolas' 'theo']

Test speakers: ['jackson']

目的是创建一个卷积神经网络,并获得超过90%的准确率。
我的模型不够好,我不认为这是一个过度拟合的问题。

model = keras.Sequential()
 model.add(keras.layers.Conv1D(64,kernel_size=3,activation='relu',input_shape=(300,40)))
model.add(keras.layers.Conv1D(32,kernel_size=3,activation='relu'))
model.add(keras.layers.Dropout(0.5))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(100,activation='relu'))
model.add(keras.layers.Dense(10,activation='softmax'))  
model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy'],
)

n_epoch = 12
model.fit(x=train.repeat(n_epoch))
model.evaluate(test)

最佳答案

在每个 Conv1D 层之后,您应该避免使用 maxpooling。最终,最大池化会破坏信息(它下采样),这对于音频信号来说尤其重要,因为音频信号的分析本质上取决于时间相关性。无论如何使用 maxpooling 的原因在https://stats.stackexchange.com/questions/288261/why-is-max-pooling-necessary-in-convolutional-neural-networks中。此外,您还可以将maxpoolingstriding结合起来,这是另一种下采样。过多的下采样会破坏信息,应该避免。这同样适用于扁平化(在图像处理中它会破坏 2D 相关性),但有时这是必要的。

如果https://medium.com/x8-the-ai-community/audio-classification-using-cnn-coding-example-f9cbd272269e中没有固定为一维是一种准确度为 97% 的 2D 方法。

https://missinglink.ai/guides/keras/keras-conv1d-working-1d-convolutional-neural-networks-keras/是用于音频分析的 1D CNN 的 keras 模型,它仅使用 1 个 maxpooling 并且没有跨步。

关于python - 如何在keras中使用一维卷积神经网络解决音频信号问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59518294/

相关文章:

python - OpenCV,Python,findContours,层次结构中的元素数

python - 使用 Anaconda 安装 PyX 失败

python - 计算数据帧中每一行有多少个连续的 TRUE

python - 线性链 CRF 分类器使用哪个激活函数?

python - Tensorflow 标量摘要为人类可读的文本

python - PyQt:将值从一个类传递到另一个类

python - 如何使用多个分类变量以 Python R 风格创建预测模型

python - 将 numpy n 维数组转换为 pandas n 维数据帧(可扩展)

python - 如何在一定范围内创建随机数组

tensorflow - keras 中的自定义损失函数 - 使用 K.minimum 实现的问题