我想用Keras创建一个音频分类系统,简单地判断给定的样本中是否包含人声。就这些。这将是我第一次尝试机器学习。
这个音频预处理器已经存在。它声称尚未完成,但已经被fork了几次:
https://github.com/drscotthawley/audio-classifier-keras-cnn
我不明白这个怎么运作,但我准备尝试一下:
https://github.com/keunwoochoi/kapre
假设我让其中一个运作起来了,接下来的过程会不会和图像分类类似?基本上,我从未完全理解什么时候使用Softmax,什么时候使用ReLu。一旦我将数据映射为张量,这在处理声音时会不会和处理图像时类似?
回答:
声音可以被视为一维图像,并通过一维卷积进行处理。通常,扩张卷积可能会做得很好,参见Wave Nets
声音也可以被视为序列,并通过RNN层进行处理(但对于大量数据来说,RNN可能过于庞大)
对于你的情况,你只需要一个输出,在最后使用'sigmoid'
激活函数和'binary_crossentropy'
损失函数。
- 结果 = 0 -> 无声音
- 结果 = 1 -> 有声音
什么时候使用’softmax’?
Softmax函数适用于多类问题(不适用于你的情况),你希望结果只有一个类。Softmax函数的所有结果之和为1。它被设计为每个类的概率。
它主要用于最终层,因为你只得到最终结果的类别。
它适用于只有一个类是正确的情况。在这种情况下,它与损失函数categorical_crossentropy
配合得很好。
模型中间的Relu和其他激活函数
这些没有严格的规则。有很多可能性。我经常在图像卷积模型中看到relu。
需要了解的重要事情是它们的“范围”。它们的输出有什么限制?
- Sigmoid:从0到1 —— 在模型的末端,这将是你的存在/不存在分类的最佳选择。也适用于希望多个可能类别一起出现的模型。
- Tanh:从-1到1
- Relu:从0到无穷大(它简单地切断负值)
- Softmax:从0到1,但确保所有值的总和为1。适用于希望在多个类别中只选择一个类别的模型的末端。