I want to implement a logistic regression with dropout regularization but so far the only working example is the following:
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
Now the problem of setting dropout in between layers is that at the end I do not have a logistic regression anymore (correct me if I’m wrong).
What I would like to do is drop out at the input level.
Actually, you still have a logistic regression with the dropout as it is.
The dropout between
fc2 will drop some (with
p=0.2) of the
input_dim features produced by
fc2 to be robust to their absence. This fact doesn’t change the logit at the output of your model. Moreover, remember that at test time, (usually) the dropout will be disabled.
Note that you could also apply dropout at the input level:
def forward(self, x): x = self.dp(x) x = self.fc1(x) x = self.dp(x) x = torch.sigmoid(self.fc2(x))
In this case,
fc1 would have to be robust to the absence of some of the input features.