我正在做一个歌曲类型分类(2个班)。对于每首歌,我都把它们切碎成小帧(5s),生成MFCC作为神经网络的输入特征,每个帧都有一个相关的歌曲类型标签。
数据如下所示:
name label feature
....
song_i_frame1 label feature_vector_frame1
song_i_frame2 label feature_vector_frame2
...
song_i_framek label feature_vector_framek
...
我知道我可以随机选择80%的歌曲(他们的小框架)作为训练数据,其余的作为测试。但是现在我写X炣列的方式是帧级的一个帧,在帧级定义了biney交叉熵损失函数。我想知道如何定制丢失函数,以便在帧级预测的聚合(例如,歌曲的每个帧预测的多数票)上最小化损失函数。
目前,我所拥有的是:
^{pr2}$此外,当我将训练和测试数据输入keras时,数据的相应ID(名称)丢失时,是否将数据(名称、lebel和feature)保存在单独的熊猫数据框架中,并将keras的预测与之匹配是一个好做法?或者还有其他好的选择吗?
提前谢谢!
体裁分类通常不需要定制的损失函数。 用Multiple Instance Learning(MIL)可以将一首歌曲分成多个预测窗口。在
MIL是一种有监督的学习方法,其中标签不在每个独立样本(实例)上,而是在实例的“包”(无序集)上。 在您的例子中,实例是每5秒窗口的MFCC功能,包就是整首歌。在
在Keras中,我们使用
TimeDistributed
层对所有窗口执行我们的模型。 然后我们使用GlobalAveragePooling1D
有效地结合了结果 实施跨窗口平均投票。这比多数投票更容易区分。在下面是一个可运行的示例:
示例输出内部和组合模型摘要:
^{pr2}$ ^{3}$以及输入模型的特征向量的形状:
8首歌曲,每个窗口23个窗口,13个MFCC乐队,每个窗口216帧。 第五维度尺寸为1让凯拉开心。。。在
相关问题 更多 >
编程相关推荐