在使用pytorch在对MNIST数据集进行预览时,出现了TypeError: 'module' object is not callable的错误:
上报错信息图如下:
从图中可以看出,报错位置为第35行,也就是如下位置的错误:
代码语言:txt复制images, labels = next(iter(data_loader_train))
在经过多次的检查发现,引起MNIST数据集无法显现的问题不是由于这一行所引起的,而是由于缺少了对图片进行处理,在加载数据代码的前添加上如下的代码:
代码语言:txt复制transform = transforms.Compose([
transforms.ToTensor(),
transforms.Lambda(lambda x: x.repeat(3,1,1)),
transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
])
- 此时问题就已经解决了
- 下面完整的代码贴出来:
1.获取手写数字的训练集和测试集
# 2.root 存放下载的数据集的路径
# 3.transform用于指定导入数据集需要对数据进行哪种操作
# 4.train是指定在数据集下完成后需要载入数据哪部分
import torch
import torchvision
import matplotlib.pyplot as plt
from torchvision import *
from torchvision import transforms
from torch.autograd import Variable
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Lambda(lambda x: x.repeat(3,1,1)),
transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
]) # 修改的位置
# 获取数据
data_train=datasets.MNIST(root='./MNIST_Model/',
transform=transforms,
train=True, # true训练集
download=True)
data_test=datasets.MNIST(root='./MNIST_Model/',
transform=transforms,
train=False) # false测试集
# 装载数据
data_loader_train=torch.utils.data.DataLoader(dataset=data_train,
batch_size=64, # 处理批次的大小(一次处理的数据大小)
shuffle=True) # 将处理的数据集合打乱
data_loader_test=torch.utils.data.DataLoader(dataset=data_test,
batch_size=64,
shuffle=True)
# 装载好数据之后,进行预览
images, labels = next(iter(data_loader_train))
img = torchvision.utils.make_grid(images)
img = img.numpy().transpose(1, 2, 0)
std = [0.5, 0.5, 0.5]
mean = [0.5, 0.5, 0.5]
img = img * std mean
plt.imshow(img)
plt.show() #这一行非常关键,不写这一行的代码的话,其预览的图片是无法展示出来的
最终的结果如图所示: