【问题标题】:Logistic regression with dropout regularization in PyTorchPyTorch 中带有 dropout 正则化的逻辑回归
【发布时间】:2021-11-10 12:39:03
【问题描述】:

我想使用 dropout 正则化实现逻辑回归,但目前唯一可行的示例如下:

class logit(nn.Module):
    def __init__(self, input_dim = 69, output_dim = 1):
        super(logit, self).__init__()
    
        # Input Layer (69) -> 1
        self.fc1 = nn.Linear(input_dim, input_dim)
        self.fc2 = nn.Linear(input_dim, 1)
 
        self.dp = nn.Dropout(p = 0.2)
      
      
    # Feed Forward Function
    def forward(self, x):
        x = self.fc1(x)
        x = self.dp(x)
        x = torch.sigmoid(self.fc2(x))
        
        return x

现在在层之间设置 dropout 的问题是,最后我不再有逻辑回归(如果我错了,请纠正我)。

我想做的是在输入级别退出。

【问题讨论】:

    标签: python neural-network pytorch dropout regularized


    【解决方案1】:

    实际上,你仍然有一个逻辑回归,而 dropout 保持原样。

    fc1fc2 之间的 dropout 将丢弃fc1 产生的一些input_dim 功能(与p=0.2),要求fc2 对它们的缺失保持稳健。这个事实不会改变模型输出的 logit。此外,请记住,在测试时,(通常)会禁用 dropout。

    请注意,您也可以在输入级别应用 dropout:

        def forward(self, x):
            x = self.dp(x)
            x = self.fc1(x)
            x = self.dp(x)
            x = torch.sigmoid(self.fc2(x))
    

    在这种情况下,fc1 必须对某些输入特征的缺失具有鲁棒性。

    【讨论】:

    • 很好的回应!但是nn.linear()会不会和下一层建立全套连接?让我改写一下,我能否将我的模型方程写为 1/(1+ exp(-(beta*x))) 其中当然我的 beta 是来自model.parameters() 的最后一个张量的元素?
    • @MarcoRepetto 是的,你会的。发生的情况是,在训练时,一些 xs 将被 dropout 清零(相当于从前一层中删除一个神经元),但所有连接仍然存在,因为 dropout 不是确定性的,并且所有这些权重都需要在测试时(即使您在测试时应用 dropout,这是不寻常的)。
    猜你喜欢
    • 1970-01-01
    • 2014-07-22
    • 2020-10-11
    • 2021-04-10
    • 2020-09-23
    • 2013-11-18
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多