As the title clearly describes, the  accuracy  of my  CNN  stays the same when the  criterion  is selected as  CrossEntropyLoss. I especially selected  CrossEntropyLoss  since only it achieves the  test loss  close to the  training loss. No issues at all for the other loss functions.
Here is the overview of the constructed  CNN  model:
MyNet(
  (activation_fn): ReLU(inplace)
  (conv1): Sequential(
    (0): Conv2d(3, 16, kernel_size=(5, 5), stride=(1, 1))
    (1): ReLU(inplace)
    (2): Dropout2d(p=0.5)
  )
  (conv2): Sequential(
    (0): Conv2d(16, 32, kernel_size=(5, 5), stride=(1, 1))
    (1): ReLU(inplace)
    (2): Dropout2d(p=0.5)
    (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  (conv3): Sequential(
    (0): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1))
    (1): ReLU(inplace)
    (2): Dropout2d(p=0.5)
  )
  (conv4): Sequential(
    (0): Conv2d(64, 128, kernel_size=(5, 5), stride=(1, 1))
    (1): ReLU(inplace)
    (2): Dropout2d(p=0.5)
  )
  (conv5): Sequential(
    (0): Conv2d(128, 256, kernel_size=(5, 5), stride=(1, 1))
    (1): ReLU(inplace)
    (2): Dropout2d(p=0.5)
    (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  (fc1): Sequential(
    (0): Linear(in_features=4096, out_features=1600, bias=True)
    (1): Dropout2d(p=0.5)
  )
  (fc2): Sequential(
    (0): Linear(in_features=1600, out_features=400, bias=True)
    (1): Dropout2d(p=0.5)
  )
  (fc3): Sequential(
    (0): Linear(in_features=400, out_features=100, bias=True)
    (1): Dropout2d(p=0.5)
  )
  (fc4): Sequential(
    (0): Linear(in_features=100, out_features=8, bias=True)
  )
)

Here is my  test  function:
def test():
    model.eval()
    test_loss = 0
    correct = 0
    with torch.no_grad():
        for data, target in test_loader:
            data, target = data.to(device), target.to(device)

            output = model(data)
            output = output.to(device)
            test_loss += criterion(output, target).item()
            _, predicted = torch.max(output.data, 1)
            correct += (predicted == target).sum().item()

    test_loss /= math.ceil((len(test_loader.dataset) / test_batch_size))
    test_losses.append(test_loss)

    acc = 100. * correct / len(test_loader.dataset)
    print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.2f}%)\n'.format(
        test_loss, correct, len(test_loader.dataset), acc))