创建自定义卷积层并比较两个keras层

2024-09-29 23:29:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在keras创建一个网络,使用中值滤波技术(http://dafx10.iem.at/papers/DerryFitzGerald_DAFx10_P15.pdf)对音频频谱图执行谐波/冲击源分离。你知道吗

给定一个输入幅度谱图,将第i个时间帧表示为Si,将第h个频率片表示为Sh,通过对Si执行中值滤波,可以生成打击增强频谱图帧PiPi=M{Sil,其中M表示中值滤波,而lperc是过滤器长度。然后将各个打击增强帧Pi组合以产生打击增强谱图P。类似地,谐波增强谱图频率片HH可以通过中值滤波频率片SH获得:Hi=M{SHlharm}。你知道吗

一旦有了pH,就可以看到每个频率单元SH,i是否属于谐波源或冲击源:如果HH,i>;pH,iSH,i转到谐波频谱图,在冲击频谱图中取值0,反之亦然。你知道吗

在我的网络中,给定输入频谱图和特定时间帧,我需要水平计算每个频率h的中位数。这可以通过lambda层和tensorflow轻松完成:

layer_H = Lambda(lambda x:tf.contrib.distributions.percentile(x[0], 50, axis=0))(layer)

这里,谐波中值滤波器的长度l是输入频谱图的水平长度。输出是一个向量,其大小等于频率的数目(在我的例子中是88)。你知道吗

下一步是我现在遇到的问题:我需要垂直计算当前时间帧的中位数,给定冲击中值滤波器的长度,并且知道我希望得到的向量与输入的大小相同,所以在每一端都要小心输入的大小(过滤器的大小将介于lharmlharm/2之间,具体取决于我们所处的位置)。因为没有更好的词,这看起来像是某种卷积。你知道吗

一旦我有了两个结果向量,我想比较它们,并将原始帧的每个值赋给冲击层(Lp)或谐波层(LH)。因此,我有三种不同的输入,HIPISI,我想通过比较HIPI得到LH,继续建立我的人际网络。如果Hi,j>;Pi,j,则LPi,j=0和LHi,j=Si,j。你知道吗

总而言之,我被困在两个不同的问题上:

  1. 如何计算水平中位数?

  2. 如何在网络中实现从HipiSiLpLH的操作?

事先非常感谢!你知道吗


Tags: 网络sh时间pi水平hi向量频谱

热门问题