我正在通过时间序列数据训练 LSTM 网络,并希望对数据进行标准化,因为我的特征具有不同的规模。
我的数据形状是
(n_samples x n_timestamps x n_features)
我想使用BatchNormalization
layer .
我应该将 axis
设置为 2(功能,如文档中所述)还是 1(时间戳)?我希望我的特征进入 [0..1] 范围,尽管它们的规模非常不同。
问题是文档并没有说明该层实际做什么,而是为 CNN 提供了建议。
最佳答案
通常,您会使用特征维度:-1。
它将单独处理每个特征并根据每个其他维度进行标准化。 但它不会使它们进入 0 到 1 的范围。它将使用 (x - 平均值)/方差 并在标准化后应用比例因子和偏差。
例如。取特征0:
- 查看批处理中所有样本和所有时间步的特征 0 的值
- 获取所有这些值的均值和方差
- 计算所有样本和步骤的特征零的归一化值
- 为特征 0 应用比例因子
- 对特征 0 应用偏差
对特征 1 重复相同的操作,使用另一个均值、另一个方差、尺度和偏差。
如果您使用时间步维度,它将单独查看每个步骤,并为每个步骤提供一个比例因子,这没有多大意义,因为步骤都应该具有相似的性质,这与可能意味着完全不同的事物的特征不同。
如果您确实需要 0 到 1 之间的值,则只需应用 Activatoin('sigmoid')
即可。如果您担心值会过于饱和,可以应用 BatchNormalization()
,然后应用 Activatoin('sigmoid')
。
关于keras - 时间序列数据的 BatchNormalization 层的 axis 参数设置什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53963181/