pytorch
type_error
ai_generated
true
TypeError: pic should be PIL Image or ndarray. Got <class 'torch.Tensor'>
ID: pytorch/torchvision-transforms-pil-error
90%Fix Rate
88%Confidence
1Evidence
2023-01-20First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| torch>=1.8 | active | — | — | — |
| torchvision>=0.9 | active | — | — | — |
Root Cause
A torchvision transform expecting PIL Image or numpy array received a raw torch.Tensor, often due to missing ToTensor() call or wrong transform order.
generic中文
期望PIL图像或numpy数组的torchvision变换接收到了原始torch.Tensor,通常是由于缺少ToTensor()调用或变换顺序错误。
Official Documentation
https://pytorch.org/vision/stable/transforms.htmlWorkarounds
-
95% success Ensure ToTensor() is the last transform: transforms.Compose([transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor()]). This converts PIL to tensor after all PIL-based transforms.
Ensure ToTensor() is the last transform: transforms.Compose([transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor()]). This converts PIL to tensor after all PIL-based transforms.
-
85% success If using custom dataset, return PIL images: from PIL import Image; img = Image.open(path).convert('RGB')
If using custom dataset, return PIL images: from PIL import Image; img = Image.open(path).convert('RGB')
中文步骤
确保ToTensor()是最后一个变换:transforms.Compose([transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor()])。这会在所有基于PIL的变换之后将PIL转换为张量。
如果使用自定义数据集,返回PIL图像:from PIL import Image; img = Image.open(path).convert('RGB')
Dead Ends
Common approaches that don't work:
-
transforms.Compose([transforms.Resize(256), transforms.ToTensor(), transforms.CenterCrop(224)])
90% fail
Adding ToTensor() after the transform that expects PIL will still pass a tensor, causing same error.
-
from torchvision.transforms import ToPILImage; img = ToPILImage()(tensor)
50% fail
Converting tensor to PIL manually with ToPILImage() but forgetting to import often leads to NameError.