Your model is generally able to overfit a small dataset as seen here:
class LendingClub(nn.Module):
    def __init__(self):
        super(LendingClub, self).__init__()
        self.linear = nn.Sequential(
            nn.Linear(22, 100),
            nn.ReLU(),
            nn.Linear(100, 64),
            nn.ReLU(),
            nn.Linear(64, 32),
            nn.ReLU(),
            nn.Linear(32, 16),
            nn.ReLU(),
            nn.Linear(16, 8),
            nn.ReLU(),
            nn.Linear(8, 1),
        )

    def forward(self, x):
        return self.linear(x)
    
model = LendingClub()

def weights_init(m):
  if isinstance(m, nn.Linear):
      nn.init.uniform_(m.weight.data, -1,1)
      nn.init.zeros_(m.bias.data)
model.apply(weights_init)

loss_fn = nn.BCEWithLogitsLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)

data = torch.randn(8, 22)
target = torch.randint(0, 2, (8, 1)).float()

for epoch in range(100):
    pred = model(data)
    loss = loss_fn(pred, target)
        
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    print('epoch {}, loss {}, acc {}'.format(
        epoch, loss.item(), ((pred>0.0)==target).float().mean()))

if you use nn.BCEWithLogitsLoss (in your current code snippet it seems you’ve experimented with different approaches such as using nn.BCELoss + sigmoid(output)), so you could also try to overfit a small dataset using the real data by playing around with some hyperparameters.