README.md
该项目将数据预处理、模型构建等均放在了LSTM+Linear.py中。该模型的结构采用最简单的LSTM加Linear结构,但是在Epoch为150时结果(R2)能达到0.38左右,同时在预测结束时,该模型会保存一张图片——labels和预测结果的对比图。 在基础的模型上,还尝试了将特征拆分输入LSTM,分别输出结果,经过cat拼接后输入Linear线性层输出结果。模型大致结构如下: `class LSTMModel(nn.Module): def init(self, args): super(LSTMModel, self).init() self.args = args self.lstm = nn.LSTM(args.input_size, args.hidden_size, args.num_layers, batch_first=True, bidirectional=args.bidirectional) self.linear0 = nn.Linear(args.all_input_size * args.hidden_size, 128) self.linear1 = nn.Linear(128, args.output_size)
def forward(self, inputs):
out0, (h0, c0) = self.lstm(inputs[:, :, 0].view(-1, self.args.window_size, self.args.input_size))
out1, (h1, c1) = self.lstm(inputs[:, :, 1].view(-1, self.args.window_size, self.args.input_size))
out2, (h2, c2) = self.lstm(inputs[:, :, 2].view(-1, self.args.window_size, self.args.input_size))
out3, (h3, c3) = self.lstm(inputs[:, :, 3].view(-1, self.args.window_size, self.args.input_size))
out4, (h4, c4) = self.lstm(inputs[:, :, 4].view(-1, self.args.window_size, self.args.input_size))
out5, (h5, c5) = self.lstm(inputs[:, :, 5].view(-1, self.args.window_size, self.args.input_size))
out6, (h6, c6) = self.lstm(inputs[:, :, 6].view(-1, self.args.window_size, self.args.input_size))
out7, (h7, c7) = self.lstm(inputs[:, :, 7].view(-1, self.args.window_size, self.args.input_size))
inputs = torch.cat([h0, h1, h2, h3, h4, h5, h6, h7], dim=2)
inputs = inputs.view(-1, self.args.input_size, self.args.all_input_size * self.args.hidden_size)
out = self.linear0(inputs)
out = self.linear1(out)
return out`
但是这个模型的结果尚不达标,R2结果为负,因此还在尝试阶段。 后续工作,打算继续尝试LSTM+Attention+Linear模型结构。