This block of code reports very bad losses:
model = ConvNet(num_classes).to(device)

# Loss and optimizer
criterion = nn.MultiLabelSoftMarginLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

# Train the model
total_step = len(train_loader)
for epoch in range(num_epochs):
    for i, sample_batched in enumerate(train_loader):
        #print(i, sample_batched['image'].size(),
        # sample_batched['landmarks'].size())
        
        images_batch, landmarks_batch = \
            sample_batched['image'], sample_batched['landmarks']
        
        images = images_batch
        labels = landmarks_batch.reshape(-1, 68 * 2)
        
        images = Variable(images.float())
        labels = Variable(labels)
        
        images = images.to(device)
        labels = labels.to(device)
        
        # Forward pass
        outputs = model(images)
        
        #print("Label Shape", labels.shape, "Output Shape", outputs.shape)
        
        
        loss = criterion(outputs, labels.float())
        
        # Backward and optimize
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
        if (i+1) % 5 == 0:
            print ('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}' 
                   .format(epoch+1, num_epochs, i+1, total_step, loss.item()))

The losses are:
Epoch [1/15], Step [5/17], Loss: -19443.7852
Epoch [1/15], Step [10/17], Loss: -48699.7461
Epoch [1/15], Step [15/17], Loss: -71593.1797
Epoch [2/15], Step [5/17], Loss: -126392.4062
Epoch [2/15], Step [10/17], Loss: -119797.7344
Epoch [2/15], Step [15/17], Loss: -234912.5000
Epoch [3/15], Step [5/17], Loss: -271398.0000
Epoch [3/15], Step [10/17], Loss: -428674.2500
Epoch [3/15], Step [15/17], Loss: -285817.3125
Epoch [4/15], Step [5/17], Loss: -387621.0938
Epoch [4/15], Step [10/17], Loss: -488975.9375
Epoch [4/15], Step [15/17], Loss: -593710.8750
Epoch [5/15], Step [5/17], Loss: -565681.6250
Epoch [5/15], Step [10/17], Loss: -633298.5000
Epoch [5/15], Step [15/17], Loss: -712257.2500
Epoch [6/15], Step [5/17], Loss: -708618.5000
Epoch [6/15], Step [10/17], Loss: -627527.0625
Epoch [6/15], Step [15/17], Loss: -996953.1875
Epoch [7/15], Step [5/17], Loss: -956897.9375
Epoch [7/15], Step [10/17], Loss: -1206485.2500
Epoch [7/15], Step [15/17], Loss: -1061303.5000
Epoch [8/15], Step [5/17], Loss: -1044490.9375
Epoch [8/15], Step [10/17], Loss: -1279828.0000
Epoch [8/15], Step [15/17], Loss: -1121125.0000
Epoch [9/15], Step [5/17], Loss: -1569353.0000
Epoch [9/15], Step [10/17], Loss: -1250445.8750
Epoch [9/15], Step [15/17], Loss: -1473160.0000
Epoch [10/15], Step [5/17], Loss: -1510457.2500
Epoch [10/15], Step [10/17], Loss: -2036726.8750
Epoch [10/15], Step [15/17], Loss: -1585122.0000
Epoch [11/15], Step [5/17], Loss: -2009158.3750
Epoch [11/15], Step [10/17], Loss: -1488373.8750
Epoch [11/15], Step [15/17], Loss: -1942903.0000
Epoch [12/15], Step [5/17], Loss: -2108666.7500
Epoch [12/15], Step [10/17], Loss: -2771515.0000
Epoch [12/15], Step [15/17], Loss: -2192605.7500
Epoch [13/15], Step [5/17], Loss: -2039266.5000
Epoch [13/15], Step [10/17], Loss: -3268939.7500
Epoch [13/15], Step [15/17], Loss: -2243900.0000
Epoch [14/15], Step [5/17], Loss: -3102693.5000
Epoch [14/15], Step [10/17], Loss: -2941674.0000
Epoch [14/15], Step [15/17], Loss: -3125370.7500
Epoch [15/15], Step [5/17], Loss: -2586744.7500
Epoch [15/15], Step [10/17], Loss: -1802294.8750
Epoch [15/15], Step [15/17], Loss: -4690499.0000

What are some ways to make them more sensible? This is for facial landmark prediction.
I understand the following ConvNet is super simple but is that to be the only reason for these terrible losses?
num_classes = 68 * 2 #68 coordinates X and Y flattened

class ConvNet(nn.Module):
    def __init__(self, num_classes=10):
        super(ConvNet, self).__init__()
        self.layer1 = nn.Sequential(
            nn.Conv2d(3, 18, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(18),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2, padding=0))
        self.layer2 = nn.Sequential(
            nn.Conv2d(18, 32, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(32),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2, padding=0))
        self.fc = nn.Linear(32 * 56 * 56, num_classes)
        
    def forward(self, x):
        out = self.layer1(x)
        #print("After Layer 1", out.shape)
        out = self.layer2(out)
        #print("After Layer 2", out.shape)
        out = out.reshape(out.size(0), -1)
        out = self.fc(out)
        #print("Final Layer Output Shape", out.shape)
        return out