pytorch LSTM模型无法学习

我创建了一个简单的LSTM模型来预测优衣库的收盘价。问题是,我的模型似乎没有学到任何东西。这是我的笔记本的链接

这是我的模型创建类(我之前尝试过使用relu激活函数,结果相同):

class lstm(torch.nn.Module):  def __init__(self,hidden_layers):    super(lstm,self).__init__()    self.hidden_layers = hidden_layers    self.lstm = torch.nn.LSTM(input_size = 2,hidden_size = 100,num_layers = self.hidden_layers,batch_first=True)    self.hidden1 = torch.nn.Linear(100,80)    self.dropout1 = torch.nn.Dropout(0.1)    self.hidden2 = torch.nn.Linear(80,60)    self.dropout2 = torch.nn.Dropout(0.1)    self.output = torch.nn.Linear(60,1)  def forward(self,x):    batch = len(x)    h = torch.randn(self.hidden_layers,batch,100).requires_grad_().cuda()    c = torch.randn(self.hidden_layers,batch,100).requires_grad_().cuda()    x,(ho,co)= self.lstm(x.view(batch,10,2),(h.detach(),c.detach()))    x = torch.reshape(x[:,-1,:],(batch,-1))    x = self.hidden1(x)    x = torch.nn.functional.tanh(x)    x = self.dropout1(x)    x = self.hidden2(x)    x = torch.nn.functional.tanh(x)    x = self.dropout2(x)    x = self.output(x)    return xmodel = lstm(10)

这是我的训练损失图:训练损失

这是我的验证损失图:验证损失

这是我的真实值(蓝色)与预测值(橙色)的对比:真实值与预测值

请问有人能指出我做错了什么吗?


回答:

你用整个数据集来训练缩放器,这不是一个好的策略。你应该只使用训练数据来训练缩放器。

你不需要缩放目标值。可以直接使用目标值,或者应用对数函数,或者使用回报率。

关于隐藏状态和细胞记忆,为什么你要跟踪梯度然后立即分离它们呢?你在输入LSTM层时不需要分离隐藏状态和细胞记忆,因为它们参与了反向传播。

如果我理解正确的话,你是用过去10个开盘价和成交量来预测下一个收盘价。我认为用这种配置很难得到好的结果。你应该更好地定义问题。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注