【问题标题】:What to set in axis parameter of BatchNormalization layer for time series data?在 BatchNormalization 层的轴参数中为时间序列数据设置什么?
【发布时间】:2019-05-26 13:17:11
【问题描述】:
我正在用时间序列数据训练 LSTM 网络,并希望对数据进行归一化,因为我的特征具有不同的规模。
我的数据形状是
(n_samples x n_timestamps x n_features)
我想使用BatchNormalization layer。
我应该将 axis 设置为 2(功能,如文档中所述)还是 1(时间戳)?我希望我的特征进入 [0..1] 范围,而它们的规模非常不同。
问题是文档没有说明这一层实际上做了什么,而是为 CNN 提供了建议。
【问题讨论】:
标签:
keras
neural-network
lstm
batch-normalization
【解决方案1】:
通常,您会使用特征维度:-1。
它将单独处理每个特征,并根据其他所有维度进行标准化。
但它不会使它们进入 0 到 1 的范围。它将使用 (x - mean)/variance 并在标准化后应用比例因子和偏差。
例如。取特征 0:
- 查看批次中所有样本和所有时间步长的特征 0 值
- 获取所有这些值的均值和方差
- 计算所有样本和步骤的归一化特征零值
- 为特征 0 应用比例因子
- 为特征 0 应用偏差
对特征 1 重复相同的操作,使用另一个均值、另一个方差、尺度和偏差。
如果您使用 timesteps 维度,它将单独查看每个步骤并为每个步骤提供一个比例因子,这没有多大意义,因为步骤应该具有相似的性质,与可能意味着完全不同的事物的特征不同。
如果您确实需要介于 0 和 1 之间的内容,您只需申请 Activatoin('sigmoid')。如果您担心您的值会过于饱和,您可以申请BatchNormalization(),然后申请Activatoin('sigmoid')。