运行PyTorch TorchVision教程出现__array__参数数量错误如何解决
这个报错的核心成因是Pillow(PIL)库与当前使用的torchvision版本不兼容:
高版本Pillow(≥9.1.0)调整了Image对象
__array__方法的参数定义,不再支持np.array()调用时额外传入dtype参数,而你当前使用的旧版torchvision的to_tensor接口刚好是按旧逻辑编写,会传入dtype参数执行np.array(pic, dtype, copy=True),因此触发了参数数量不匹配的错误。
解决方案
- 方案一:降级Pillow到兼容版本
直接执行命令安装匹配版本即可,无需修改现有代码:
该版本可适配绝大多数旧版torchvision。pip install pillow==8.4.0 - 方案二:升级torchvision到适配版本
将PyTorch和torchvision同步升级到最新稳定版,新版torchvision已经修复了该调用逻辑问题,可正常适配高版本Pillow。 - 方案三:临时兼容补丁
如果暂时不方便调整依赖版本,可在数据集的__getitem__方法中,把读取到的PIL图像手动转成numpy数组后再传入transform,跳过torchvision对PIL对象的转换逻辑即可,不过该方案为临时补丁,不建议长期使用。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

