Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pytorch RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 0

I use code from here to train a model to predict printed style number from 0 to 9:

idx_to_class = {0: "0", 1: "1", 2: "2", 3: "3", 4: "4", 5: "5", 6: "6", 7:"7", 8: "8", 9:"9"} def predict(model, test_image_name):      transform = image_transforms['test']      test_image = Image.open(test_image_name)     plt.imshow(test_image)      test_image_tensor = transform(test_image)      if torch.cuda.is_available():         test_image_tensor = test_image_tensor.view(1, 3, 224, 224).cuda()     else:         test_image_tensor = test_image_tensor.view(1, 3, 224, 224)      with torch.no_grad():         model.eval()         # Model outputs log probabilities         out = model(test_image_tensor)         ps = torch.exp(out)         topk, topclass = ps.topk(1, dim=1)         # print(topclass.cpu().numpy()[0][0])         print("Image class:  ", idx_to_class[topclass.cpu().numpy()[0][0]])  predict(model, "path_of_test_image") 

But I get an error when try to use predict:

Traceback (most recent call last):    File "<ipython-input-12-f8636d3ba083>", line 26, in <module>     predict(model, "/home/x/文档/Deep_Learning/pytorch/MNIST/test/2/QQ截图20191022093955.png")    File "<ipython-input-12-f8636d3ba083>", line 9, in predict     test_image_tensor = transform(test_image)    File "/home/x/.local/lib/python3.6/site-packages/torchvision/transforms/transforms.py", line 61, in __call__     img = t(img)    File "/home/x/.local/lib/python3.6/site-packages/torchvision/transforms/transforms.py", line 166, in __call__     return F.normalize(tensor, self.mean, self.std, self.inplace)    File "/home/x/.local/lib/python3.6/site-packages/torchvision/transforms/functional.py", line 217, in normalize     tensor.sub_(mean[:, None, None]).div_(std[:, None, None])  RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 0 

How could I fix it? Thanks.

like image 754
ah bon Avatar asked Oct 22 '19 03:10

ah bon


People also ask

How do you size a tensor Pytorch?

Using size() method: The size() method returns the size of the self tensor. The returned value is a subclass of a tuple.

How do you make a torch tensor?

To create a tensor with pre-existing data, use torch.tensor() . To create a tensor with specific size, use torch.* tensor creation ops (see Creation Ops). To create a tensor with the same size (and similar types) as another tensor, use torch.*_like tensor creation ops (see Creation Ops).


1 Answers

I suspect your test_image has an additional alpha channel per pixel, thus it has 4 channels instead of only three.
Try:

test_image = Image.open(test_image_name).convert('RGB') 
like image 64
Shai Avatar answered Sep 21 '22 20:09

Shai