pytorch lstm训练例子,pytorch lstm 预测

  pytorch lstm训练例子,pytorch lstm 预测

  本文主要介绍PyTorch构建LSTM,实现多变量、多步的时间序列负荷预测。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。

  00-1010i。前言二。数据处理。LSTM模式四。训练和预测v .源代码和数据

  

目录

  在前两篇文章中,PyTorch构建LSTM实现时间序列预测(负荷预测)和PyTorch构建LSTM实现多元时间序列预测(负荷预测),我们分别用LSTM实现单变量单步长时间序列预测和多元单步长时间序列预测。

  本文主要考虑利用PyTorch建立LSTM,实现多变量多步时间序列预测。

  系列文章:

  PyTorch构建双向LSTM实现时序负荷预测

  PyTorch建成LSTM实现多变量时序负荷预测

  PyTorch深度学习LSTM从输入到线性输出

  PyTorch建设LSTM实现时序负荷预测

  

I. 前言

  数据集是某个地区某段时间的电力负荷数据。除了负载,还包括温度、湿度等信息。

  本文根据前24次的负荷和当时的环境变量,预测后4次的负荷(步长可调)。

  定义加载数据(文件名):

  全局最大值、最小值

  df=PD . read _ CSV(OS . path . dirname(OS . getcwd())/data/new _ data/ file _ name,encoding=gbk )

  columns=df.columns

  df.fillna(df.mean(),inplace=True)

  MAX=np.max(df[columns[1]])

  MIN=NP . MIN(df[列[1]])

  df[columns[1]]=(df[columns[1]]-MIN)/(MAX-MIN)

  返回df

  类MyDataset(数据集):

  def __init__(self,data):

  self.data=数据

  def __getitem__(self,item):

  返回自身数据[项目]

  def __len__(self):

  返回len(自身数据)

  定义nn_seq(文件名,B,编号):

  打印(数据处理.)

  数据=加载数据(文件名)

  load=data[data.columns[1]]

  load=load.tolist()

  data=data.values.tolist()

  序列=[]

  对于范围(0,len(data) - 24 - num,num):内的I

  train_seq=[]

  train_label=[]

  对于范围(I,I ^ 24):内的j

  x=[load[j]]

  对于范围(2,8):中的c

  x.append(data[j][c])

  训练序列追加(x)

  对于范围(i 24,i 24编号):内的j

  train_label.append(load[j])

  train_seq=火炬。浮动处理器(训练序列)

  train_label=火炬。FloatTensor(train_label)。视图(-1)

  序列追加((train_seq,train_label))

  #打印(序列[-1])

  DTR=seq[0: int(len(seq)* 0.7)]

  DTE=seq[int(len(seq)* 0.7): len(seq)]

  train_len=int(len(Dtr)/B) * B

  test_len=int(len(Dte)/B) * B

  Dtr,Dte=D

  tr[:train_len], Dte[:test_len]

   train = MyDataset(Dtr)

   test = MyDataset(Dte)

   Dtr = DataLoader(dataset=train, batch_size=B, shuffle=False, num_workers=0)

   Dte = DataLoader(dataset=test, batch_size=B, shuffle=False, num_workers=0)

   return Dtr, Dte

  

  其中num表示需要预测的步长,如num=4表示预测接下来4个时刻的负荷。

  任意输出其中一条数据:

  

(tensor([[0.5830, 1.0000, 0.9091, 0.6957, 0.8333, 0.4884, 0.5122],

   [0.6215, 1.0000, 0.9091, 0.7391, 0.8333, 0.4884, 0.5122],

   [0.5954, 1.0000, 0.9091, 0.7826, 0.8333, 0.4884, 0.5122],

   [0.5391, 1.0000, 0.9091, 0.8261, 0.8333, 0.4884, 0.5122],

   [0.5351, 1.0000, 0.9091, 0.8696, 0.8333, 0.4884, 0.5122],

   [0.5169, 1.0000, 0.9091, 0.9130, 0.8333, 0.4884, 0.5122],

   [0.4694, 1.0000, 0.9091, 0.9565, 0.8333, 0.4884, 0.5122],

   [0.4489, 1.0000, 0.9091, 1.0000, 0.8333, 0.4884, 0.5122],

   [0.4885, 1.0000, 0.9091, 0.0000, 1.0000, 0.3256, 0.3902],

   [0.4612, 1.0000, 0.9091, 0.0435, 1.0000, 0.3256, 0.3902],

   [0.4229, 1.0000, 0.9091, 0.0870, 1.0000, 0.3256, 0.3902],

   [0.4173, 1.0000, 0.9091, 0.1304, 1.0000, 0.3256, 0.3902],

   [0.4503, 1.0000, 0.9091, 0.1739, 1.0000, 0.3256, 0.3902],

   [0.4502, 1.0000, 0.9091, 0.2174, 1.0000, 0.3256, 0.3902],

   [0.5426, 1.0000, 0.9091, 0.2609, 1.0000, 0.3256, 0.3902],

   [0.5579, 1.0000, 0.9091, 0.3043, 1.0000, 0.3256, 0.3902],

   [0.6035, 1.0000, 0.9091, 0.3478, 1.0000, 0.3256, 0.3902],

   [0.6540, 1.0000, 0.9091, 0.3913, 1.0000, 0.3256, 0.3902],

   [0.6181, 1.0000, 0.9091, 0.4348, 1.0000, 0.3256, 0.3902],

   [0.6334, 1.0000, 0.9091, 0.4783, 1.0000, 0.3256, 0.3902],

   [0.6297, 1.0000, 0.9091, 0.5217, 1.0000, 0.3256, 0.3902],

   [0.5610, 1.0000, 0.9091, 0.5652, 1.0000, 0.3256, 0.3902],

   [0.5957, 1.0000, 0.9091, 0.6087, 1.0000, 0.3256, 0.3902],

   [0.6427, 1.0000, 0.9091, 0.6522, 1.0000, 0.3256, 0.3902]]), tensor([0.6360, 0.6996, 0.6889, 0.6434]))

  

  数据格式为(X, Y)。其中X一共24行,表示前24个时刻的负荷值和该时刻的环境变量。Y一共四个值,表示需要预测的四个负荷值。需要注意的是,此时input_size=7,output_size=4。

  

  

III. LSTM模型

  这里采用了深入理解PyTorch中LSTM的输入和输出(从input输入到Linear输出)中的模型:

  

class LSTM(nn.Module):

   def __init__(self, input_size, hidden_size, num_layers, output_size, batch_size):

   super().__init__()

   self.input_size = input_size

   self.hidden_size = hidden_size

   self.num_layers = num_layers

   self.output_size = output_size

   self.num_directions = 1

   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)

   def forward(self, input_seq):

   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)

   # print(input_seq.size())

   seq_len = input_seq.shape[1]

   # input(batch_size, seq_len, input_size)

   input_seq = input_seq.view(self.batch_size, seq_len, self.input_size)

   # output(batch_size, seq_len, num_directions * hidden_size)

   output, _ = self.lstm(input_seq, (h_0, c_0))

   # print(output.size=, output.size())

   # print(self.batch_size * seq_len, self.hidden_size)

   output = output.contiguous().view(self.batch_size * seq_len, self.hidden_size) # (5 * 30, 64)

   pred = self.linear(output) # pred()

   # print(pred=, pred.shape)

   pred = pred.view(self.batch_size, seq_len, -1)

   pred = pred[:, -1, :]

   return pred

  

  

  

IV. 训练和预测

  训练和预测代码和前几篇都差不多,只是需要注意input_size和output_size的大小。

  训练了100轮,预测接下来四个时刻的负荷值,MAPE为7.53%:

  

  

  

V. 源码及数据

  源码及数据我放在了GitHub上,LSTM-Load-Forecasting

  以上就是PyTorch搭建LSTM实现多变量多步长时序负荷预测的详细内容,更多关于LSTM多变量多步长时序负荷预测的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: