自定义数据集报错:'int' object is not iterable
收藏
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
收藏
请登录后评论
各路大神救救孩子吧,调了好久了
如果是for数据集,结果正常
但是DATALOADER加载dataset以后,就会报那个int的错误
DATALOADER的问题报错信息可能和实际错误不太一致。考虑到您使用for没有报错,那可以默认您的数据读取是正确的:
那么最大的可能就是数据的不一致问题,就是本来图像都是128*128,突然有一个256*128的就会报类似的错。
建议将batchsize改成1,如果没有报错,那就是该问题。
如果仍然报错,那就进一步排查数据格式的问题。
打印所有的数据类型,应该有某个数据读取不到导致错误。
希望能帮助到你,如果有效请将该答案采取为解决方案
你漏掉了一个括号:
看官网示例:
有可能是批次处理时数据不一致问题。尝试自定义dataloader的collate_fn参数,对齐批次数据格式。
检查数据类型,不要用int类型作为迭代器
看了一下没有正确回答
今天不小心遇到了,检查了几个小时没发现问题,后来和示例代码对比才发现,DataLoader函数第二个参数不是batchszie,这个和pytorch不一样,所以要给上参数名称
DataLoader(train_dataset, batch_size=batch_size, shuffle=False, num_workers = 0)
赞,就是这个原因导致的,完美解决问题