You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类初始化疑问:SpikingJelly中DVS128Gesture参数问题

关于SpikingJelly中DVS128Gesture类实例化的疑问

问题背景

在使用SpikingJelly的神经网络训练代码时遇到报错,对其中DVS128Gesture类的初始化方式存在疑问。

类定义代码

class DVS128Gesture(sjds.NeuromorphicDatasetFolder):
    def __init__(
            self,
            root: str,
            train: bool = None,
            data_type: str = 'event',
            frames_number: int = None,
            split_by: str = None,
            duration: int = None,
            custom_integrate_function: Callable = None,
            custom_integrated_frames_dir_name: str = None,
            transform: Optional[Callable] = None,
            target_transform: Optional[Callable] = None,
    ) -> None:
    # 类实现逻辑省略

实例化代码

train_data_loader = torch.utils.data.DataLoader(
    dataset=DVS128Gesture(dataset_dir, train=True, use_frame=True, frames_num=T,
                            split_by=split_by, normalization=normalization),
    batch_size=batch_size,
    shuffle=True,
    num_workers=4,
    drop_last=True,
    pin_memory=True)
test_data_loader = torch.utils.data.DataLoader(
    dataset=DVS128Gesture(dataset_dir, train=False, use_frame=True, frames_num=T,
                            split_by=split_by, normalization=normalization),
    batch_size=batch_size,
    shuffle=False,
    num_workers=4,
    drop_last=False,
    pin_memory=True)

疑问点

  • 实例化时传入的use_frame=True并非类定义的第3个参数data_type,这是作者的错误还是理解误区?
  • 实例化时使用frames_num=T而非直接传T,且参数名与类定义的frames_number不符,这种赋值写法的含义是什么?

解答

针对疑问1

这是典型的库版本与代码版本不匹配问题:

  • 你当前查看的DVS128Gesture类定义是某一版本的API,而实例化代码对应的是另一版本的API。旧版SpikingJelly中,DVS128Gesture确实存在use_frame参数,用来切换加载原始事件数据或帧数据;新版则将该逻辑整合到data_type参数中(例如data_type='frame'等价于旧版的use_frame=True)。
  • 另外,Python支持关键字参数不按位置顺序传入,只要类定义中存在对应参数就能正常传递;但如果当前类定义无use_frame参数,传入就会抛出TypeError,这也是你报错的直接原因。

针对疑问2

同样是版本不一致导致的参数名变更:

  • 旧版API中该参数名为frames_num,新版则更名为frames_number。
  • 这里的frames_num=T是关键字参数赋值,作用是明确指定参数值,避免位置参数传递错误;如果当前类定义中不存在frames_num参数,这么写会直接触发报错。

解决建议

  • 统一库与代码版本:要么升级/降级SpikingJelly库以匹配实例化代码,要么修改实例化代码适配当前类API(比如将use_frame=True改为data_type='frame',frames_num=T改为frames_number=T)。
  • 注意实例化代码中的normalization参数在当前类定义中也不存在,需调整为对应逻辑(比如将归一化操作放到transform参数中实现)。

内容的提问来源于stack exchange,提问作者Marziye Hasanshahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:15:12