Lstm多变量时间序列预测框架|pytorch
这是目前我看国内总结时序预测对小白很友好的博客教程,先推荐一下
代码:单步预测
## 如果在初始化LSTM时令batch_first=True,那么input和output的shape将由:
## input(seq_len, batch_size, input_size)
## output(seq_len, batch_size, num_directions * hidden_size)
## 变为
## input(batch_size, seq_len, input_size)
## output(batch_size, seq_len, num_directions * hidden_size)
## self.num_directions = 1 # 单向LSTM 2为双向LSTM
-
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
-
class LSTM(nn.Module):
-
def __init__(self, input_size, hidden_size, num_layers, output_size, batch_size):
-
super().__init__()
-
self.input_size = input_size #channel
-
self.hidden_size = hidden_size #输出维度 也就是输出通道
-
self.num_layers = num_layers
-
self.output_size = output_size #输出个数
-
self.num_directions = 1 # 单向LSTM
-
self.batch_size = batch_size
-
self.lstm = nn.LSTM(self.input_size, self.hidden_size, self.num_layers, batch_first=True)
-
self.linear = nn.Linear(self.hidden_size, self.output_size)
-
# self.linear = nn.Linear()
-
-
-
def forward(self, input_seq):
-
batch_size, seq_len = input_seq.shape[0], input_seq.shape[1]
-
h_0 = torch.randn(self.num_directions * self.num_layers, self.batch_size, self.hidden_size).to(device)
-
c_0 = torch.randn(self.num_directions * self.num_layers, self.batch_size, self.hidden_size).to(device)
-
# output(batch_size, seq_len, num_directions * hidden_size)
-
output, _ = self.lstm(input_seq, (h_0, c_0)) # output(5, 30, 64)
-
pred = self.linear(output) # (5, 30, 1)
-
pred = pred[:, -1, :] # (5, 1)
-
return pred
-
lstm = LSTM(input_size=7,hidden_size=64, output_size=1,batch_size=5,num_layers=5).to(device)
-
tensor = torch.rand(5, 30, 7).to(device)
-
result = lstm(tensor)
-
print("result.shape:",result.shape)
参考资料
//写的非常得好
多步预测的讨论
我的意见如下:首先,要理清楚两个概念:一是多变量一般是指你在预测时考虑了主变量以外的其他变量,而不是说你要预测多个变量,预测多个变量当然是可以的,但效果特别差,这个我之前还和清华一个搞新能源预测的PhD讨论过,所以我们一般是多变量预测单变量,如果要预测多变量那就训练多个LSTM;二是步长的问题,我这里预测了4步,所以是多步。你所纠结的无非是预测的是下一时刻,然而我却直接经过转换变成了预测四个时刻,但这种写法其实是合理的。多步长预测一般有以下几种方法:第一种就是我这种,直接取最后一步,然后接一个MLP来转换成多步,这种优点是简单,可以直接输入多个预测值,这种相当于是把最后的时间序列预测变成了一个纯粹的神经网络非线性预测,也就是这种最后的预测结果要看你MLP的性能了,所以这种我们一般会多加几个线性层;第二种是滚动预测,也就是预测单步然后把预测值加入继续滚动预测多次,这种可能会把误差传递,效果也一般;第三种是多个单步预测,也就是你要预测接下来n步,那么就训练n个模型分别来预测每一步,这种比较耗时。所以用哪种看你自己,你想要理解我这种想法,你可以就把最后这个转换看成是一个简单的MLP转换,仅此而已。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiahech
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22