PyTorch LSTM预测输出恒为定值问题排查求助
问题:LSTM预测结果始终为近恒定值的排查与解决
我希望使用7个特征、时间步长为4来预测一个变量,相关数据与代码如下:
数据准备
# Shape X_train: torch.Size([24433, 4, 7]) # Shape Y_train: torch.Size([24433, 4, 1]) # Shape X_test: torch.Size([6109, 4, 7]) # Shape Y_test: torch.Size([6109, 4, 1]) train_dataset = TensorDataset(X_train, Y_train) test_dataset = TensorDataset(X_test, Y_test) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True) test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=32, shuffle=False)
初始LSTM模型
class LSTMModel(nn.Module): def __init__(self, input_size, hidden_size, output_size): super().__init__() self.lstm = nn.LSTM(input_size, hidden_size) self.linear = nn.Linear(hidden_size, output_size) def forward(self, x): x, _ = self.lstm(x) x = self.linear(x) return x model = LSTMModel(input_size=7, hidden_size=256, output_size=1) loss_fn = nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.1)
模型训练与测试流程
# 遍历训练集 for X, Y in train_loader: optimizer.zero_grad() Y_pred = model(X) loss = loss_fn(Y_pred, Y) loss.backward() optimizer.step() model.eval() # 遍历测试集 for X, Y in test_loader: Y_pred = model(X) loss = loss_fn(Y_pred, Y)
真实标签与预测结果示例
真实标签Y示例
tensor([[[59.], [59.], [59.], [59.]], [[70.], [70.], [70.], [70.]], [[100.], [0.], [0.], [0.]], # 更多示例
预测结果Y_pred示例
tensor([[[15.8224], [15.8224], [15.8224], [15.8224]], [[16.1654], [16.1654], [16.1654], [16.1654]], [[16.2127], [16.2127], [16.2127], [16.2127]], # 更多示例
已尝试的调整方法
- 修改模型架构(不同批次大小、不同层数)
- 添加Dropout与权重衰减参数
- 调整训练轮次
- 更换优化器(Adam、SGD)并调整学习率
- 对输入数据进行对数变换
我是PyTorch与LSTM的新手,可能存在操作失误,但无论如何调整,预测结果始终为近恒定值。请问我哪里出错了?应该如何解决?
内容的提问来源于stack exchange,提问作者user17515752
相关产品推荐
相关产品推荐

