xazl0715 2022-11-04 09:00 采纳率: 100%
浏览 507
已结题

关于pytorch中缺少next属性的报错

在pytorch学习深度学习时,按照官方文档尝试简单的分类器,但在运行的时候出现报错:(https://github.com/zergtant/pytorch-handbook/blob/master/chapter1/4_cifar10_tutorial.ipynb
import torch
import torchvision
import torchvision.transforms as transforms

transform = transforms.Compose(
    [transforms.ToTensor(),
     transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
                                          shuffle=True, num_workers=2)

testset = torchvision.datasets.CIFAR10(root='./data', train=False,
                                       download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
                                         shuffle=False, num_workers=2)

classes = ('plane', 'car', 'bird', 'cat',
           'deer', 'dog', 'frog', 'horse', 'ship', 'truck')
import matplotlib.pyplot as plt
import numpy as np
# 展示图像的函数
def imshow(img):
    img = img / 2 + 0.5     # unnormalize
    npimg = img.numpy()
    plt.imshow(np.transpose(npimg, (1, 2, 0)))

# 获取随机数据
dataiter = iter(trainloader)
images, labels = dataiter.next()

# 展示图像
imshow(torchvision.utils.make_grid(images))
# 显示图像标签
print(' '.join('%5s' % classes[labels[j]] for j in range(4)))
运行结果及报错内容:
AttributeError                            Traceback (most recent call last)
Input In [3], in <cell line: 14>()
     12 # 获取随机数据
     13 dataiter = iter(trainloader)
---> 14 images, labels = dataiter.next()
     16 # 展示图像
     17 imshow(torchvision.utils.make_grid(images))

AttributeError: '_MultiProcessingDataLoaderIter' object has no attribute 'next'
搜索发现

_MultiProcessingDataLoaderIter作为DataLoader的iters,应该具有next属性啊

请问是我环境安装出现什么问题了吗

目前torch: 1.13.0+cu117 torchvision : 0.14.0+cu117

  • 写回答

3条回答 默认 最新

  • Jackyin0720 2022-11-04 10:19
    关注

    next()函数实际上调用了传入函数的.__next()__成员函数。所以,如果传入的函数没有这个成员,则会报错
    参考代码理解

    import torch
    # 生成一些测试数据
    X = torch.normal(0, 1, (1000, 2)) # x: sample size = 1000, feature_dim = 2
    y = torch.normal(0, 1, (1000, 1)) # y: sample size = 1000, dim = 1
    
    # 定义一个函数,返回dataloader
    def load_array(data_and_label, batch_size, is_train=True):
        """Construct a PyTorch data iterator."""
        dataset = data.TensorDataset(*data_and_label)
        return data.DataLoader(dataset, batch_size, shuffle=is_train)
    
    batch_size = 10
    data_iter = load_array((X, y), batch_size)
    
    #这句会报错:next(data_iter)
    next(iter(data_iter))
    """
    输出前10组数据
    """
    
    
    

    这里,为什么 next(data_iter) 报错,而 next(iter(data_iter)) 可以返回数据呢?这是因为,pytorch的DataLoader函数没有 next 成员,但有 iter 成员(见源文件)。所以,需要首先通过 iter() 函数返回一个 iter 成员,再找这个 iternext

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月12日
  • 已采纳回答 11月4日
  • 修改了问题 11月4日
  • 修改了问题 11月4日
  • 展开全部

悬赏问题

  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: