多特征预测软测量LSTM

项目场景:

多特征预测软测量LSTM

例如:多特征预测软测量LSTM,根据pearson关联系数提取得到关键特征,使用LSTM网络实现软测量预测


问题描述

验证集loss值异常:震荡,不收敛,周期化


原因分析:

周期化loss

batch_size 与总数据相除不是整数


尝试解决:

采用L2 正则化,dropout 层,增加数据量,删除batch_size 与总数据相除后,不完整的最后一批

1.采用L2 正则化
先获得模型中所有需要辨识的参数

@L2
    for param_tuple in model.named_parameters():
        name, param = param_tuple
        print("name = ", name)
        print("-" * 100)

选择需要加入L2惩罚项的参数,在优化器中加入weight_decay参数

@L2
optimizer = torch.optim.Adam([
        {'params': (p for name, p in model.named_parameters() if 'bias' not in name), 'weight_decay': 0.0001},
        {'params': (p for name, p in model.named_parameters() if 'bias' in name)}
    ], lr=learning_rate)

    

2.添加dropout层

@dropout
class LSTMModel(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, dropout_prob=0.2):
        super(LSTMModel, self).__init__()
        self.hidden_size = hidden_size
        self.num_layers = num_layers
        self.lstm = nn.LSTM(input_size, hidden_size,num_layers, batch_first=True)
        self.dropout = nn.Dropout(dropout_prob)
        self.fc = nn.Linear(hidden_size, 1)

    def forward(self, x):
        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)
        c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)
        out, _ = self.lstm(x, (h0, c0))
        out = self.dropout(out[:, -1, :])
        out = self.fc(out)
        return out

3.删除batch_size与总数据相除后,不完整的最后一批

train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=False, drop_last=True)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值