I have already solved the problem. The code is here:
1) optimizer = optim.SGD(model.parameters(), lr=0.0001)
and
2) loss = criterion(torch.sigmoid(output), label)
the reason of 2) is

BCELoss accepts only inputs that have all elements in range [0; 1]

But I don’t know why 1) have to use optim.SGD() and optim.Adam() can’t