Your classification path has just one output, i.e. one class.
If you use F.log_softmax(x, dim=1) on it, it will “normalize” your single prediction to be always 0.
Change it to self.fc2d = nn.Linear(20, 2) for a two-class classification as suggested here 110.
Alternatively, you could use nn.BCELoss with a single output and F.sigmoid.