如何在PyTorch中实现带输入层Dropout正则化的Logistic Regression
解答
你的认知是正确的,你提供的示例代码不属于标准逻辑回归。标准逻辑回归的结构是单个线性映射层接sigmoid激活函数,示例中额外加入了维度和输入相同的fc1隐藏层,本质是一个2层的浅层神经网络。
输入层加dropout的标准逻辑回归实现
要在输入层应用dropout,只需要在将输入传入线性层之前,先对输入特征做dropout处理即可,参考实现代码如下:
import torch import torch.nn as nn class LogisticRegressionWithInputDropout(nn.Module): def __init__(self, input_dim=69, dropout_p=0.2): super().__init__() # 输入层dropout self.input_dropout = nn.Dropout(p=dropout_p) # 标准逻辑回归的线性层:输入维度直接映射到输出1维 self.linear = nn.Linear(input_dim, 1) def forward(self, x): # 先对输入做dropout,再进入线性层 x = self.input_dropout(x) # 线性层+Sigmoid激活,符合逻辑回归的标准形式 return torch.sigmoid(self.linear(x))
注意事项
- 训练时请确保模型处于训练模式(
model.train()),dropout才会生效;推理/评估阶段需要调用model.eval()关闭dropout,避免预测结果出现随机偏差 - 输入层的dropout概率不要设置过高,建议控制在0.1~0.3区间,防止丢失过多有效输入特征影响模型效果
内容的提问来源于stack exchange,提问作者Marco Repetto
相关产品推荐
相关产品推荐

