TypeError: 'module' object is not callable (pytorch在进行MNIST数据集预览时出现的错误)

2022-05-12 08:32:51 浏览数 (2)

在使用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))
 ])   
  • 此时问题就已经解决了
  • 下面完整的代码贴出来:
代码语言:txt复制
 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() #这一行非常关键,不写这一行的代码的话,其预览的图片是无法展示出来的

最终的结果如图所示:

在这里插入图片描述在这里插入图片描述

0 人点赞