Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何训练具有多个独立时间序列的LSTM神经网络?_Python_Keras_Neural Network_Lstm_Training Data - Fatal编程技术网

Python 如何训练具有多个独立时间序列的LSTM神经网络?

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

假设我有3个传感器(Sa、Sb和Sc),它们只测量1月份的每日气温(朱利安时期的第1天到第31天)。假设我有3年的完整数据集,天数按顺序计算(1到365:第一年,366到730:第二年…)。 因此,我的数据集如下所示:

     -------- ------ -------
    | 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个样本的误差。我会保持你的批量大小不变

如果有帮助的话,该模型类似于: