I wanted to add little more output :
labels = Variable(2*(labels.float()-0.5))
print(labels)
tensor([ 1.,  1.,  1.,  1.,  1.,  1., -1., -1.,  1., -1.,  1., -1.,  1., -1.,
1., -1.,  1., -1., -1.,  1., -1.,  1.,  1.,  1.,  1.,  1.,  1., -1.,
-1.,  1.,  1., -1., -1.,  1.,  1.,  1., -1.,  1., -1., -1.,  1.,  1.,
1.,  1.,  1.,  1., -1., -1.,  1., -1.,  1., -1.,  1.,  1.,  1.,  1.,
-1., -1., -1.,  1.,  1.,  1., -1.,  1.])
tensor([-1., -1., -1., -1., -1.,  1.,  1.,  1.,  1., -1.,  1., -1.,  1.,  1.,
1.,  1.,  1.,  1.,  1.,  1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
1.,  1.,  1., -1., -1.,  1.,  1., -1., -1.,  1.,  1., -1.,  1.,  1.,
-1.,  1.,  1.,  1., -1.,  1.,  1., -1., -1., -1.,  1.,  1.,  1.,  1.,
1.])
#Logistic regression model and Loss
model = nn.Linear(input_size,num_classes)
Forward pass
    outputs = model(images)
    print(outputs)

tensor([[ 0.2859,  0.5506],
[ 0.1532,  0.3645],
[ 0.0835,  0.3317],
[-0.3868,  0.3129],
[ 0.2356,  0.4399],…
…
[-0.5188,  0.3862],
[ 0.0870,  0.2604]], grad_fn=)
oneout = torch.max(outputs.data,1)[0]
print(oneout)
tensor([ 0.1414,  0.9170,  0.2080,  0.1533,  0.4046,  0.1832,  0.6290,  0.5015,
0.0848,  0.0381,  0.6226, -0.2800,  0.3362,  0.2727,  0.1597,  0.0630,
0.3553,  0.0353,  0.1693, -0.0425,  0.1555,  0.1116,  0.0479,  0.3952,
0.0967, -0.0542,  0.1298, -0.2771,  0.7281, -0.3405, -0.0428,  0.1271,
0.0476, -0.1436, -0.0904,  0.1636, -0.1354,  0.1565,  0.3858, -0.0791,
0.2349,  0.2871, -0.1032,  0.0958,  0.0709,  0.2271,  0.0794,  0.0134,
-0.0602,  0.4522,  0.1116,  1.0347,  0.2286, -0.1382, -0.0443,  0.1548,
0.1367, -0.3741, -0.1599,  0.5601, -0.3454,  0.2412,  0.3693, -0.4265])
loss = loss_criteria(oneout, labels)
    # Backward and optimize
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()        

    if (i+1) % 100 == 0:
        print ('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}' 
               .format(epoch+1, num_epochs, i+1, total_step, loss.item()))

So when I print the loss it does not converge. Any help is much appreciated…