在Google Colab中遇torch.frombuffer属性缺失错误,求解决方法
torch.frombuffer属性错误 问题描述
在Google Colab中运行以下代码加载FashionMNIST数据集:
data_root = os.path.join(os.getcwd(), "data") transform = transforms.Compose( [ transforms.ToTensor(), transforms.Normalize([0.5], [0.5]), ] ) fashion_mnist_dataset = FashionMNIST(data_root, download = True, train = True, transform = transform)
触发如下错误:
/usr/local/lib/python3.7/dist-packages/torchvision/datasets/mnist.py in read_sn3_pascalvincent_tensor(path, strict)
524 # we need to reverse the bytes before we can read them with torch.frombuffer().
525 needs_byte_reversal = sys.byteorder == "little" and num_bytes_per_value > 1
--> 526 parsed = torch.frombuffer(bytearray(data), dtype=torch_type, offset=(4 * (nd + 1)))
527 if needs_byte_reversal:
528 parsed = parsed.flip(0)AttributeError: module 'torch' has no attribute 'frombuffer'
解决方案
错误根源是当前使用的PyTorch版本过低,torch.frombuffer是PyTorch 1.7.0及以上版本新增的API,旧版本不支持。可通过以下方式解决:
- 升级PyTorch到兼容版本
在Colab代码单元格中执行以下命令,升级PyTorch和TorchVision:
!pip install --upgrade torch torchvision
升级完成后,点击菜单栏「Runtime」→「Restart runtime」重启运行时,再重新执行数据集加载代码。
- 安装兼容旧PyTorch的TorchVision版本
若不想升级PyTorch,可安装不依赖torch.frombuffer的旧版TorchVision(比如0.8.1版本):
!pip install torchvision==0.8.1
安装后同样需要重启运行时再执行代码。
- 手动修改库文件逻辑(不推荐)
找到Colab中torchvision/datasets/mnist.py的read_sn3_pascalvincent_tensor函数,将torch.frombuffer替换为旧版本兼容的实现(比如用torch.tensor转换字节数据)。但该方法操作繁琐,易引发其他问题,优先推荐前两种方案。
内容的提问来源于stack exchange,提问作者서혁준

