Paddle 【BUG反馈】Dataloader无法正确读取数据,且未抛出异常

lf3rwulv  于 2022-10-25  发布在  其他
关注(0)|答案(5)|浏览(455)

bug描述 Describe the Bug

bug描述

paddle.io.Dataloader使用自定义的collate_fn,返回数据为list时,即使 len(loader)>0 ,Dataloader迭代也会直接结束,,且未抛出异常。

修复建议

调试定位到 paddle/fluid/dataloader/flat.py中的_flatten_batch()函数无法正确处理数组类型

复现代码

from paddle.io import DataLoader, Dataset

class DataDummy(Dataset):
    def __init__(self):
        self.data = [(1, 2, 3) for _ in range(300)]

    def __len__(self):
        return len(self.data)

    def __getitem__(self, idx):
        return self.data[idx]

    def collate_fn(self, batch):
        # # 可正常运行
        # data = paddle.to_tensor([s[0] for s in batch]), paddle.to_tensor([s[1] for s in batch]), paddle.to_tensor([s[2] for s in batch])

        # BUG: 无法正常获取数据,且没有抛出任何异常, 调试定位到paddle/fluid/dataloader/flat.py中的_flatten_batch函数无法正确处理数组类型
        data = [s[0] for s in batch], [s[1] for s in batch], [s[2] for s in batch]
        return data

if __name__ == "__main__":
    ds = DataDummy()
    datad = DataLoader(ds, batch_size=128, collate_fn=ds.collate_fn)

    print("len(datad) =", len(datad))

    read = []
    for i, batch in enumerate(datad):
        read.append(batch)
    print("实际读取batch数量 = ", len(read))

其他补充信息 Additional Supplementary Information

  • No response*
js4nwp54

js4nwp541#

您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看 官网API文档常见问题历史IssueAI社区 来寻求解答。祝您生活愉快~

Hi! We've received your issue and please be patient to get responded. We will arrange technicians to answer your questions as soon as possible. Please make sure that you have posted enough message to demo your request. You may also check out the APIFAQGithub Issue and AI community to get the answer.Have a nice day!

axr492tv

axr492tv2#

你好,你dataset返回的数据格式是怎么样的

ruyhziif

ruyhziif3#

你好,你dataset返回的数据格式是怎么样的

就是和bug描述复现代码一样,collate_fn返回的数据为([1,1,1...], [2,2,2...], [3,3,3...])。我给的复现代码是可以直接运行复现的。

lnlaulya

lnlaulya4#

请问是否解决了呢,我的 collate_fn 返回的是自定义类型,也不能够遍历dataloader。

z4bn682m

z4bn682m5#

我是把collate_fn返回的list数据类型, 改成numpy之后可以正常运行了。具体的原因你可以看 from paddle.fluid.dataloader.flat import _flatten_batch 这个函数。但是这里的实现也比较混乱,我还没有完全看懂要怎么才一定能正常运行。

相关问题