Your evaluation code seems wrong to me. You load your test data as inputs, but you feed forward images  to your model. i.e. You keep giving the model the same cat, ship, ship, plane images, but you are evaluating it with different labels  obtained from the testloader.
Changing images to inputs should be able to solve your problem.
correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
#         images, labels = data
        inputs, labels = data[0].to(device), data[1].to(device) # You load the test images as `inputs`
        outputs = net(images.to(device)) # You feedforward `images`
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()
print('Accuracy of the network on the 10000 test images: %d %%' % (
    100 * correct / total))