Keras BatchNormalization 轴

数据挖掘 喀拉斯 美国有线电视新闻网 批量标准化
2022-02-03 11:55:16

我使用频谱图作为我用 Python 中的 tensorflow.keras 创建的卷积神经网络的输入。

它的形状是(时间,频率,1)。

CNN 的输入形状是 (None, time, frequency, n_channels),其中 n_channels=1,第一层是 Conv2D。在每个卷积层之间,我在激活层之前使用 BatchNormalization 层。BatchNormalization 的默认值为“axis=-1”。我应该保持原样还是应该使用对应于“频率”轴的“axis = 2”来制作它?

这背后的想法是频谱图的特征在频率轴上表示。

1个回答

有趣的问题:)

使用频谱图意味着您实际上是在使用图像(频率随时间变化)。我理解内容就像图表一样理解,即轴时间频率,但据网络所知,你给它的是黑白图像;假设您的最后一个维度(=1)是渠道维度。

您通常希望对特征采用批处理规范,因此它可能取决于您所看到的特征。您是否关心光谱峰/谷的形状,或最终通道中编码的值?axis使用时的含义BatchNormalization可能有点令人困惑。看看这些解释这里的一些要点

因此,就纯图像而言,我建议保留默认的axis=-1.

请记住,2d 卷积操作正在寻找图像本身的空间相关性——内核从左到右、从上到下滑动。因此,将这个想法与然后在第二个轴 ( frequency) 上采用批处理规范相结合实际上是一个正交的想法。

我不知道它是否会成功,但我认为如果你的频谱图及时对齐可能最有意义,也就是说它们覆盖相同的标称时间段,因此对于其中两个具有相同大小的频谱图,x-轴具有相同的比例。否则,您将在不同的时间范围内进行批量标准化,从而激发样本之间的时间信息。