PyTorch LSTM单步预测
前言
- LSTM 航空乘客预测单步预测的两种情况。 简单运用LSTM 模型进行预测分析。
- 加入注意力机制的LSTM 对航空乘客预测采用了目前市面上比较流行的注意力机制,将两者进行结合预测。
- 多层 LSTM 对航空乘客预测 简单运用多层的LSTM 模型进行预测分析。
- 双向LSTM 对航空乘客预测双向LSTM网络对其进行预测。
- MLP多层感知器 对航空乘客预测简化版 使用MLP 对航空乘客预测
- CNN + LSTM 航空乘客预测采用的CNN + LSTM网络对其进行预测。
- ConvLSTM 航空乘客预测采用ConvLSTM 航空乘客预测
- LSTM的输入格式和输出个数说明 中对单步和多步的输入输出格式进行了解释
- LSTM 单变量多步预测航空乘客简单版
- LSTM 单变量多步预测航空乘客复杂版
- LSTM 多变量单步预测空气质量(1—》1) 用LSTM 前一个数据点的多变量预测下一个时间点的空气质量
- LSTM 多变量单步预测空气质量(3 —》1) 用LSTM 前三个数据点的多变量预测下一个时间点的空气质量
- 麻雀算法SSA优化LSTM超参数
- 蚁群算法ACO优化LSTM超参数
- 粒子群算法PSO优化LSTM超参数
本文主要研究pytorch版本的LSTM对数据进行单步预测
LSTM
下面展示LSTM的主要代码结构
class LSTM(nn.Module):def __init__(self, input_size, hidden_size, num_layers, output_size, batch_size,args) :super().__init__()self.input_size = input_size # input 特征的维度self.hidden_size = hidden_size # 隐藏层节点个数。self.num_layers = num_layers # 层数,默认为1self.output_size = output_size # self.num_directions = 1 # 单向LSTMself.batch_size = batch_sizeself.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):input_seq = input_seq.to(args.device)batch_size, seq_len = input_seq.shape[0], input_seq.shape[1]h_0 = torch.randn(self.num_directions * self.num_layers, input_seq.size(0), self.hidden_size).to(args.device)c_0 = torch.randn(self.num_directions * self.num_layers, input_seq.size(0), self.hidden_size).to(args.device)# output(batch_size, seq_len, num_directions * hidden_size)output, _ = self.lstm(input_seq, (h_0, c_0)) # pred = self.linear(output) pred = pred[:, -1, :] return pred
主函数代码
def run(args):# create datadataset = get_data(args.data_file_path)data,label = create_dataset(dataset,args.time_step,args.pre_len)data,label,mm_y = normalization(data,label)x_data,y_data,x_train,y_train,x_test,y_test = split_data(data,label,args.split_ratio)train_loader,test_loader,num_epochs = data_generator(x_train,y_train,x_test,y_test,args.num_n_iters,args.batch_size)model=LSTM(args.input_size,args.hidden_size,args.num_layers,args.output_size,args.batch_size,args).to(args.device)loss_function = torch.nn.MSELoss().to(args.device)optimizer = torch.optim.Adam(model.parameters(),lr=args.lr)print(model)train(model,train_loader,num_epochs,loss_function,optimizer,args)model.load_state_dict(torch.load(os.path.join(args.model_save_path, "best.pt")))# test_all(model,x_data,y_data,mm_y,args)print("test\\n")test(model,test_loader,mm_y,args)if __name__ == '__main__':args = parse_args()args.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")# args.device = "cpu"args.n_gpu = torch.cuda.device_count()print(f'args.n_gpu:{args.n_gpu}\\n')set_seed(args)run(args)
运行代码
#!/bin/bash
set -euxo pipefail
python3 origin_lstm.py \\--seed=123 \\--num_n_iters=1000 \\--batch_size=64 \\--time_step=3 \\--pre_len=1 \\--split_ratio="0.85" \\--input_size="1" \\--num_layers=6 \\--hidden_size=64 \\--output_size 1 \\
备注
需要源代码和数据集,或者想要沟通交流,请私聊,谢谢.