Using some random input and target, your model seems to be able to learn, as the loss decreases:
x = torch.randn(1, 3, 100, 100)
target = torch.randint(0, 2, (1, 1, 100, 100), dtype=torch.float32)
optimizer = torch.optim.Adam(net.parameters(), lr=1e-3)
criterion = nn.BCEWithLogitsLoss()

for epoch in range(20):
    optimizer.zero_grad()
    output = net(x)
    bce_loss = criterion(output, target)
    dice_loss = dice(output, target)
    loss = bce_loss + dice_loss 
    loss.backward()
    optimizer.step()
    print('Epoch {}, loss {}, bce {}, dice {}'.format(
        epoch, loss.item(), bce_loss.item(), dice_loss.item()))