# 类型错误：pic应为PIL图像或ndarray。得到<class 'torch.Tensor'>

- **ID:** `pytorch/torchvision-transforms-pil-error`
- **领域:** pytorch
- **类别:** type_error
- **验证级别:** ai_generated
- **修复率:** 90%

## 根因

期望PIL图像或numpy数组的torchvision变换接收到了原始torch.Tensor，通常是由于缺少ToTensor()调用或变换顺序错误。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| torch>=1.8 | active | — | — |
| torchvision>=0.9 | active | — | — |

## 解决方案

1. ```
   确保ToTensor()是最后一个变换：transforms.Compose([transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor()])。这会在所有基于PIL的变换之后将PIL转换为张量。
   ```
2. ```
   如果使用自定义数据集，返回PIL图像：from PIL import Image; img = Image.open(path).convert('RGB')
   ```

## 无效尝试

- **transforms.Compose([transforms.Resize(256), transforms.ToTensor(), transforms.CenterCrop(224)])** — Adding ToTensor() after the transform that expects PIL will still pass a tensor, causing same error. (90% 失败率)
- **from torchvision.transforms import ToPILImage; img = ToPILImage()(tensor)** — Converting tensor to PIL manually with ToPILImage() but forgetting to import often leads to NameError. (50% 失败率)
