You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行MNIST代码报错“MNIST object has no attribute data”求修复方案

修复"MNIST object has no attribute data"错误

这是一个很常见的PyTorch/torchvision版本API变更导致的问题,我来帮你一步步解决:

错误原因

你当前使用的torchvision版本中,datasets.MNIST默认返回的是包含PIL图像对象和标签的数据集实例,并没有直接暴露.data和.targets属性——这些属性是旧版本torchvision的API,或者仅当数据集内部存储张量格式数据时才存在。

修复方案

推荐两种可靠的解决方法,优先选择第一种:

方法一:使用transform将图像转为张量(规范做法)

在创建MNIST数据集时,通过transform参数将PIL图像自动转为PyTorch张量,之后可以灵活获取数据:

import torch
from torchvision import datasets, transforms

# 定义转换流水线,将PIL图像转为张量
transform = transforms.Compose([
    transforms.ToTensor(),
])

# 创建带transform的数据集
mnist_train_set = datasets.MNIST(data_dir + '/mnist/', train=True, download=True, transform=transform)
mnist_test_set = datasets.MNIST(data_dir + '/mnist/', train=False, download=True, transform=transform)

# 一次性提取所有训练数据和标签
train_input = torch.stack([img for img, _ in mnist_train_set]).float()
train_target = torch.tensor([target for _, target in mnist_train_set])

# 一次性提取所有测试数据和标签
test_input = torch.stack([img for img, _ in mnist_test_set]).float()
test_target = torch.tensor([target for _, target in mnist_test_set])

方法二:兼容旧版本API(不推荐长期使用)

如果你的torchvision版本较旧(比如0.10.x及以前),可以替换为旧版本的属性名,但这个API已经被标记为废弃,未来版本可能会移除:

# 注意:该方法依赖旧版本torchvision,仅作临时兼容用
train_input = mnist_train_set.train_data.view(-1, 1, 28, 28).float()
train_target = mnist_train_set.train_labels
test_input = mnist_test_set.test_data.view(-1, 1, 28, 28).float()
test_target = mnist_test_set.test_labels

更规范的使用方式

在实际训练中,更推荐使用DataLoader批量加载数据,这是PyTorch的标准用法,能自动处理批量、打乱等操作:

from torch.utils.data import DataLoader

# 创建数据加载器
train_loader = DataLoader(mnist_train_set, batch_size=64, shuffle=True)
test_loader = DataLoader(mnist_test_set, batch_size=64, shuffle=False)

# 遍历加载批量数据
for batch_input, batch_target in train_loader:
    # batch_input的形状为 (64, 1, 28, 28),直接用于模型输入
    # 在这里编写你的训练逻辑
    pass

内容的提问来源于stack exchange,提问作者ForumWhiner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:15:20