基于Pytorch+LSTM实现一元单步时间序列预测(保姆级教程)

目录

模型搭建

模型基础

要点

单元测试

数据准备

数据来源

数据读取

数据加载

单元测试

模型训练

模型参数规范化

训练步骤

模型测试

主程序

训练结果

相关技巧


模型搭建

模型基础

  

                                                           图1  RNN网络结构

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.batch_size = batch_size
        self.num_directions = 1
        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,inputseq):
        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,_ = self.lstm(inputseq,(h_0,c_0))
        pred = self.linear(output[:,-1,:])
        return pred

要点

1)关于nn.Module类:nn.Module是神经网络模型的基础类,自定义层/块/模型均需要继承该模型,并重新实现__init__()构造函数和forward前向函数。一般,构造函数只定义一些层,在forward函数中定义层间的连接关系。super().__init__()指的是继承父类的初始化方法。只要定义了forward函数,可以通过autograd自动实现反向求导。

2)关于LSTM的结构:input(batch_size,seq_len,input_size)

                                     h_0/c_0(number_directions*num_layers,batch_size,hidden_size)

                                     output(batch_size,seq_len,hidden_size)

        其中:batch_size表示一次性输入的个数,seq_len表示输入的时间序列长度,input_size表示几元变量,hidden_size表示隐藏层神经单元个数。

单元测试

    model = LSTM(1,32,2,1,2)
    test_input = torch.tensor([[70, 80, 90],[70, 80, 90]]).float().unsqueeze(2)
    predicted_output = model(test_input)
    print(predicted_output)

数据准备

数据来源

天池-某地区电网某地区电网2018年1月1日至2021年8月31日间隔 15 分钟的电力系统负荷数据,链接为:电网_数据集-阿里云天池 (aliyun.com)

数据读取

def read_data(filename):
    data = pd.read_csv(filename,skiprows=1)
    data.head(5)
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值