自定义Dataset加载到Dataloader时遇类型错误:'list'无法转为整数
解决:'list' object cannot be interpreted as integer 类型错误
核心问题
你的自定义vids_and_label类中,__len__方法错误地返回了列表self.video_title,但PyTorch的DataLoader要求这个方法必须返回整数类型的数据集总长度,这就是触发错误的直接原因。
修复步骤
修改__len__方法,返回数据集的实际长度(即视频标题列表的元素个数):
def __len__(self): return len(self.video_title)
额外优化建议
- 标签判断逻辑可以简化,减少冗余代码:
# 替代原有的两次if判断 _label = 0 if _label.lower() == 'fake' else 1 - 优化标签查询效率:在
__init__阶段提前构建文件名到标签的字典,避免在__getitem__中每次都执行DataFrame查询操作,示例如下:def __init__(self, vid_title, labels, sequence_length=60, transform=None): self.label = labels self.video_title = vid_title self.sequence_length = sequence_length self.transform = transform # 提前构建文件名到标签的映射字典 self.label_map = dict(zip(labels['file'], labels.iloc[:,1].apply(lambda x: 0 if x.lower() == 'fake' else 1))) def __getitem__(self, item): path = self.video_title[item] _vid = f'{path}'.split('\\')[-1] # 直接通过字典取标签 _label = self.label_map[_vid] # 后续帧处理代码不变...
内容的提问来源于stack exchange,提问作者UncleSteve_
相关产品推荐
相关产品推荐

