解决了一个bug,记录一下
先上结论:pytorch有时候dataloader写不好,报错'xxx object is not iterable',首先检查getitem还有getitem调用的transform里有没有哪一步输入了None,尤其是这个数据在函数里定义成了其他类型,但是调用函数的时候因为不需要这个数据的计算于是输入了None。如果一个函数的输入可能是None,要添加判断,对舍弃None对应的数据的情况单独处理。
Pytorch里报错not iterable的情况主要有:1数据的长度不可获取,2数据不能转换成list、tuple、string、Tensor及其派生类型中的任意一种。
这些报错None全部符合,是第一优先待排查的bug。
如果用了dictionary不用担心,pytorch里有针对dict的处理。
不过遇到这种情况,也有除了排除None输入之外的解决方法。昨天神奇地通过调整to_tensor调用的位置,跑通了,现在还不知道为啥……
直接去github上pytorch项目里搜“not iterable”(记得加引号,才不会被拆开搜索),只有两个文件里有对应的报错提示信息,第一个文件里有1处,第二个文件里有2处