首页 Paddle框架 帖子详情
自定义数据集报错:'int' object is not iterable 已解决
收藏
快速回复
Paddle框架 问答深度学习 1515 8
自定义数据集报错:'int' object is not iterable 已解决
收藏
快速回复
Paddle框架 问答深度学习 1515 8
class MyData(Dataset):
    def __init__(self, ms4, pan, label):
        self.train_data1 = ms4
        self.train_data2 = pan
        self.label = label

    def __getitem__(self, index):
        image_ms4 = self.train_data1[index]
        image_pan = self.train_data2[index]
        image_label = self.label[index]

        return image_ms4, image_pan, image_label

    def __len__(self):
        return self.label.shape[0]

train_dataset = MyData(train_x1, train_x2, train_y)
test_dataset  = MyData(test_x1, test_x2, test_y)

batch_size = 8
train_iter = DataLoader(train_dataset, batch_size, shuffle=False, num_workers = 0)
test_iter = DataLoader(test_dataset, batch_size, shuffle=False, num_workers = 0)


for A, B, y in train_iter:
    print(A.shape, B.shape, y.shape)
    print(A.dtype, B.dtype, y.dtype)
    break

 

rain_x1 规模 (640, 4, 16, 16)     float32

train_x2 规模 (640, 1, 16, 16)    float32

train_y   规模 (640, )                 int32

 

 

---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)/tmp/ipykernel_364/901604979.py in 
----> 1 for A, B, y in train_iter:
      2     print(A.shape, B.shape, y.shape)     #(256,1,28,28)  (256)
      3     print(A.dtype, B.dtype, y.dtype)
      4     break
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/reader.py in __iter__(self)
    424     def __iter__(self):
    425         if self.num_workers == 0:
--> 426             return _DataLoaderIterSingleProcess(self)
    427         elif self._persistent_workers:
    428             if self._iterator is None:
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dataloader/dataloader_iter.py in __init__(self, loader)
    168         self._blocking_queue_capacity = 1 * len(self._places)
    169 
--> 170         self._init_thread()
    171         self._shutdown = False
    172 
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dataloader/dataloader_iter.py in _init_thread(self)
    175 
    176     def _init_thread(self):
--> 177         self._var_names = [v.name for v in self._feed_list]
    178         self._shapes = [v.shape for v in self._feed_list]
    179         self._dtypes = [v.dtype for v in self._feed_list]
TypeError: 'int' object is not iterable
4# 回复于2021-12
DATALOADER的问题报错信息可能和实际错误不太一致。考虑到您使用for没有报错,那可以默认您的数据读取是正确的: 那么最大的可能就是数据的不一致问题,就是本来图像都是128*128,突然有一个256*128的就会报类似的错。 建议将batchsize改成1,如果没有报错,那就是该问题。 如果仍然报错,那就进一步排查数据格式的问题。 打印所有的数据类型,应该有某个数据读取不到导致错误。   希望能帮助到你,如果有效请将该答案采取为解决方案
展开
0
收藏
回复
全部评论(8)
时间顺序
yunqiao
#2 回复于2021-11

各路大神救救孩子吧,调了好久了

0
回复
yunqiao
#3 回复于2021-11

如果是for数据集,结果正常

for A, B, y in train_dataset:
    print(A.shape, B.shape, y.shape)
    print(A.dtype, B.dtype, y.dtype)
    break

但是DATALOADER加载dataset以后,就会报那个int的错误

0
回复
十进制到二进制
#4 回复于2021-12

DATALOADER的问题报错信息可能和实际错误不太一致。考虑到您使用for没有报错,那可以默认您的数据读取是正确的:

那么最大的可能就是数据的不一致问题,就是本来图像都是128*128,突然有一个256*128的就会报类似的错。

建议将batchsize改成1,如果没有报错,那就是该问题。

如果仍然报错,那就进一步排查数据格式的问题。

打印所有的数据类型,应该有某个数据读取不到导致错误。

 

希望能帮助到你,如果有效请将该答案采取为解决方案

1
回复
DeepGeGe
#5 回复于2021-12

你漏掉了一个括号:

看官网示例:

0
回复
超级码立z
#6 回复于2021-12

有可能是批次处理时数据不一致问题。尝试自定义dataloader的collate_fn参数,对齐批次数据格式。

0
回复
时间女神
#7 回复于2021-12

检查数据类型,不要用int类型作为迭代器

 

 

0
回复
分身乏术
#8 回复于2023-11

看了一下没有正确回答

今天不小心遇到了,检查了几个小时没发现问题,后来和示例代码对比才发现,DataLoader函数第二个参数不是batchszie,这个和pytorch不一样,所以要给上参数名称

DataLoader(train_dataset, batch_size=batch_size, shuffle=False, num_workers = 0)

2
回复
想学好高数
#9 回复于2024-03
看了一下没有正确回答 今天不小心遇到了,检查了几个小时没发现问题,后来和示例代码对比才发现,DataLoader函数第二个参数不是batchszie,这个和pytorch不一样,所以要给上参数名称 DataLoader(train_dataset, batch_size=batch_size, shuffle=False, num_workers = 0)
展开

赞,就是这个原因导致的,完美解决问题

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户