Python 如何训练具有多个独立时间序列的LSTM神经网络?
假设我有3个传感器(Sa、Sb和Sc),它们只测量1月份的每日气温(朱利安时期的第1天到第31天)。假设我有3年的完整数据集,天数按顺序计算(1到365:第一年,366到730:第二年…)。 因此,我的数据集如下所示:Python 如何训练具有多个独立时间序列的LSTM神经网络?,python,keras,neural-network,lstm,training-data,Python,Keras,Neural Network,Lstm,Training Data,假设我有3个传感器(Sa、Sb和Sc),它们只测量1月份的每日气温(朱利安时期的第1天到第31天)。假设我有3年的完整数据集,天数按顺序计算(1到365:第一年,366到730:第二年…)。 因此,我的数据集如下所示: -------- ------ ------- | Sensor | Day | Value | | Sa | 01 | 7.2 | | Sa | 02 | 7.0 | ... | Sa
-------- ------ -------
| Sensor | Day | Value |
| Sa | 01 | 7.2 |
| Sa | 02 | 7.0 |
...
| Sa | 31 | 5.9 |
| Sa | 366 | 7.4 |
| Sa | 367 | 7.5 |
...
| Sa | 1095 | 5.5 |
| Sb | 01 | 6.9 |
| Sb | 02 | 7.1 |
...
| Sb | 1095 | 5.6 |
| Sc | 01 | 6.8 |
...
| Sc | 1095 | 4.1 |
-------- ------ -------
我想预测给定t-4到t-1的时间t的值(因此x大小为3,y大小为1)。
如我们所见,我们有9个连续时间序列(Sa从第1天到第31天,Sa从第366天到第730天,Sb从第1天到第31天…)。
考虑到此场景中的批量问题,我应该如何组织我的培训集
到目前为止,考虑到“有效”序列,我将数据拆分为x/y 2D矩阵,它是:
features_set labels
| x1 | x2 | x3 | | y |
| 7.2 | 7.0 | 6.9 | | 6.7 | (sample 1: for Sa days 1 to 3 -> 4)
| 7.0 | 6.9 | 6.7 | | 6.8 | (sample 2: for Sa days 2 to 4 -> 5)
...
| 5.7 | 5.8 | 5.8 | | 5.9 | (sample 31: for Sa days 28 to 30 -> 31)
| 7.4 | 7.5 | 7.4 | | 7.3 | (sample 32: for Sa days 366 to 368 -> 369)
...
| 7.0 | 6.9 | 6.7 | | 6.8 | (sample 251: for Sc days 1092 to 1094 -> 1095)
注意,样本1至31是Sa第一个月的经典“移位序列”,但样本31和32之间的时间序列存在“中断”,因为样本31是第一年测量的一部分,样本32是第二年测量的一部分
如果我训练批次大小(N)为32的神经网络,我得到的最小损失函数是0.5。当我将批量大小减少到8时,我得到的损失为0.1到0.05。当批量大小为1时,我得到0.04(这似乎是可以得到的最小值)
model=Sequential()
add(LSTM(4,input_shape=(features_set.shape[1],1)))
模型.添加(密度(1))
compile(loss='mean\u squared\u error',optimizer='adam')
model.fit(特征集、标签、年代=100、批次大小=N)
(其中特征_集为251x3x1浮点矩阵,标签为251x1x1浮点矩阵)
那么,选择更大的批量是否会导致像31和32这样的样本一起批量?这是导致训练结果更差的原因吗?
除了使用1的批量大小之外,如何处理这种情况?首先,我将标准化0和1之间的数据 看看更小的学习速度和更多的时代是否有帮助 每个批次的大小为[3,3],如3个传感器和3个时间步。 您正在针对[1,1]大小的输出对每个批次进行培训 我的猜测是,当包含更多批次时,误差会更大,因为模型考虑的是32个样本的误差,而不是1个样本的误差。我会保持你的批量大小不变
如果有帮助的话,这个模型看起来类似于这样:首先,我将标准化0和1之间的数据 看看更小的学习速度和更多的时代是否有帮助 每个批次的大小为[3,3],如3个传感器和3个时间步。 您正在针对[1,1]大小的输出对每个批次进行培训 我的猜测是,当包含更多批次时,误差会更大,因为模型考虑的是32个样本的误差,而不是1个样本的误差。我会保持你的批量大小不变 如果有帮助的话,该模型类似于: