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

时间:2019-06-20 15:30:37

标签: python tensorflow keras neural-network compare

我目前正在喀拉拉邦创建一个网络,以使用中值滤波技术(http://dafx10.iem.at/papers/DerryFitzGerald_DAFx10_P15.pdf)对音频频谱图执行谐波/打击乐源分离。

给出输入幅度谱图 S ,并将第 i 个时间范围表示为 S i ,然后第 h 个频率切片为 S h ,这是一个打击乐增强的频谱图框架, P i 可以通过对 S i 进行中值滤波来生成: P i = M { S i l perc },其中 M 表示中值滤波, l perc 是过滤器长度。然后将各个打击乐增强帧 P i 组合在一起,以生成一个打击乐增强频谱图 P 。类似地,可以通过中值滤波频率切片 S h 获得谐波增强的频谱图频率切片 H h H i = M { S h l 伤害}。

一旦您拥有 P H ,您就可以查看每个频箱 S h,i 是否属于谐波或打击乐来源:如果 H h,i > P h,i S h,i 进入谐波频谱图,并在打击乐频谱图中取值为0,反之亦然。

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

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

在这里,谐波中值滤波器 l harm 的长度是输入频谱图的水平长度。输出是一个向量,其大小等于频率数(在我的情况下为88)。

下一步是我现在所处的位置:鉴于敲击中位数的长度,我需要垂直计算当前时间段 S i 的中位数过滤 l perc ,并知道我希望结果矢量的大小与输入的大小相同,因此我必须注意输入的每一端(过滤器的大小将在 l harm l harm / 2之间,具体取决于我们所在的位置) 。由于缺少更好的词,这看起来有点像卷积。

一旦有了两个结果向量 H i P i ,我想将它们进行比较将原始帧 S i 的每个值分配给打击乐层( L p )或调和层( L h )。因此,我有三个不同的输入, H i P i S 我想以 L p L h 结尾比较 H i P i ,然后继续从那里构建我的网络。如果 H i,j > P i,j ,则 L p < sub> i,j = 0和 L h i,j = S i,j

总而言之,我陷入了两个不同的问题:

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

  2. 如何在网络中实施允许我从 H i P i S i L p L h 吗?

非常感谢您!

0 个答案:

没有答案