You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在混合量子LSTM模型中添加dropout层解决过拟合问题

核心问题原因

你的操作无效有两个核心原因:

  1. PyTorch中nn.LSTM的dropout参数仅在堆叠LSTM层数≥2时生效,你当前layer_dim=1为单隐藏层,该参数不产生任何作用。
  2. dropout参数代表神经元被随机置零的概率,取值范围为01,你设置`dropout=1`意味着所有隐藏神经元输出全部被置零,完全丢失特征信息,自然不会有优化效果,常规使用的取值区间为0.20.5。

正确添加dropout的实现方案

方案1:新增独立Dropout层(适配单隐藏层LSTM)

你可以在输入层进入LSTM之前、LSTM输出与全连接层之间两个位置添加独立的nn.Dropout层,修改后的模型代码如下:

import torch.nn as nn
import torch
import qiskit
import numpy as np
import torch as T

class LSTMModel(nn.Module):
    def __init__(self, input_dim, hidden_dim, layer_dim, output_dim, dropout_prob=0.3):
        super(LSTMModel, self).__init__()
        self.hidden_dim = hidden_dim
        self.layer_dim = layer_dim
        # 输入层Dropout:对原始输入特征做随机置零
        self.input_dropout = nn.Dropout(dropout_prob)
        # 移除无效的LSTM层内dropout设置
        self.lstm = nn.LSTM(input_dim, hidden_dim, layer_dim, batch_first=True)
        # LSTM输出后的Dropout:对时序特征做随机置零
        self.lstm_dropout = nn.Dropout(dropout_prob)
        self.fc = nn.Linear(hidden_dim, output_dim)
        self.hybrid = Hybrid(qiskit.Aer.get_backend('qasm_simulator'), 100, np.pi / 2)

    def forward(self, x):
        # 输入先经过dropout
        x = self.input_dropout(x)
        h0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_()
        c0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_()
        
        x, (hn, cn) = self.lstm(x, (h0.detach(), c0.detach()))
        # 取最后一个时间步输出后经过dropout
        x = self.lstm_dropout(x[:, -1, :])
       
        x = self.fc(x) 
        x = self.hybrid(x)
        return T.cat((x, 1 - x), -1)    

方案2:堆叠多层LSTM使用层间dropout

如果算力允许,可以把layer_dim调整为≥2,此时就可以直接使用LSTM自带的dropout参数实现层间的随机失活,配合输出层的dropout效果更好:

# 参数调整示例
layer_dim = 2
dropout_prob = 0.3

# 对应LSTM初始化修改为
self.lstm = nn.LSTM(input_dim, hidden_dim, layer_dim, dropout=dropout_prob, batch_first=True)

额外辅助降低过拟合的方法
  • 训练时加入L2正则化:在优化器中设置weight_decay参数,比如optim.Adam(model.parameters(), lr=1e-3, weight_decay=1e-5)
  • 加入早停(Early Stopping)机制:当验证集准确率连续N个epoch不上升时直接停止训练,避免模型学习噪声
  • 降低隐藏层维度:你当前hidden_dim=100对于输入维度16的任务来说可能过大,可以尝试下调到32~64区间减少参数量
  • 扩充训练数据集,或加入数据增强操作

内容的提问来源于stack exchange,提问作者user14924

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:15:03