在时间序列数据的BatchNormalization层的轴参数中应设置什么?

时间:2018-12-28 19:02:06

标签: keras neural-network lstm batch-normalization

我正在训练有关时间序列数据的LSTM网络,并希望对数据进行归一化,因为我的功能规模不同。

我的数据形状是

dupes

我想使用BatchNormalization layer

我应该将(n_samples x n_timestamps x n_features) 设置为2(文档中所述的功能)还是1(时间戳)?我希望我的功能进入[0..1]范围,而它们的比例却大不相同。

问题在于文档没有说明该层实际上在做什么,而是为CNN提供了建议。

1 个答案:

答案 0 :(得分:1)

通常,您将使用要素维度:-1。

它将单独对待每个功能,并基于其他维度进行归一化。 但这不会使它们进入0到1的范围。它将使用(x - mean)/variance并在归一化后应用比例因子和偏差。

例如。采取功能0:

  • 查看批次中所有样本和所有时间步的特征0值
  • 获取所有这些值的均值和方差
  • 计算所有样本和步骤的特征零的归一化值
  • 为功能0应用比例因子
  • 为功能0施加偏差

对特征1重复相同的操作,但具有另一个均值,另一个方差,比例和偏差。

如果使用时间步长维度,它将分别查看每个步骤并为每个步骤提供一个比例因子,这没有多大意义,因为步骤都应具有相似的性质,而功能可能意味着完全不同的特征。

如果您确实需要0到1之间的值,则只需应用Activatoin('sigmoid')。如果您担心自己的价值观会过于饱和,可以先应用BatchNormalization(),然后再应用Activatoin('sigmoid')