查看: 2296|回复: 1

TypeError: 'builtin_function_or_method' object is not iterable 报错解决

[复制链接]

4

主题

34

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2018-10-15 16:23:27 | 显示全部楼层 |阅读模式
在用Pytorch做图像分类的时候,遇到了这个BUG,因为这段代码和网上例子一样仍报错,所以很奇怪,求解答
先贴上我报错的信息和代码
  1. TypeError: 'builtin_function_or_method' object is not iterable
复制代码
  1. import torch
  2. import torch.utils.data as Data
  3. import torchvision
  4. from torchvision import transforms, datasets

  5. # hyper parameters
  6. BATCH_SIZE = 8

  7. path = "DogsVSCats"
  8. # define the data transform
  9. data_transform = transforms.Compose([
  10.     transforms.ToTensor(),  # change the pixel to [0, 1.0]
  11.     transforms.CenterCrop(224),
  12.     transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
  13. ])

  14. # define the data set in dictionary form
  15. image_data = {x:datasets.ImageFolder(root=os.path.join(path, x), transform=data_transform)
  16.               for x in ['train', 'valid']}
  17. # define the data loader
  18. data_loader = {x:Data.DataLoader(dataset=image_data[x], batch_size=BATCH_SIZE, shuffle=True)
  19.                for x in ['train', 'valid']}

  20. # preview a batch of data in data set
  21. # x_example, y_example = next(iter(data_loader['train']))
  22. x_train, y_train = next(iter(data_loader["train"]))
  23. print("x_example个数:", len(x_train))
  24. print("y_example个数:", len(y_train))
复制代码

报错的是第三行
  1. x_train, y_train = next(iter(data_loader["train"]))
复制代码
求大神告知
回复

使用道具 举报

5

主题

53

帖子

130

积分

注册会员

Rank: 2

积分
130
发表于 2018-10-15 16:29:57 | 显示全部楼层
定义transform时,一定要调整图片的大小,再ToTensor()
修改后的部分如下:调整CenterCrop()和ToTensor()的顺序
  1. # define the data transform !!!参数顺序很重要!!!先调整大小再ToTensor
  2. data_transform = transforms.Compose([
  3.     transforms.CenterCrop(224),
  4.     transforms.ToTensor(),  # change the pixel to [0, 1.0]
  5.     transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
  6. ])
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表