面向PyTorch音频分类研究项目的合理设计模式咨询
音频分类研究项目的Pipeline设计优化需求
我正在开展一项基于音频数据的分类研究项目,需通过多个预训练模型提取特征后训练新模型。项目采用Python、PyTorch及Dataset/DataLoader实现,但随着复杂度提升,现有项目结构与代码设计已变得混乱。由于是研究项目无需部署到生产环境,希望获得符合研究类项目通用模式的极简解决方案。
已尝试的三种实现方案
实现1:带参数run()方法的单实例Pipeline类
- 优点:仅需实例化一个Pipeline对象
- 问题:外部调用的嵌套循环和
run()方法内部逻辑均较为繁琐
train_dataset = AudioDataset(train_data_path) val_dataset = AudioDataset(val_data_path) test_dataset = AudioDataset(test_data_path) train_loader = DataLoader(train_dataset, batch_size=1, shuffle=False) val_loader = DataLoader(val_dataset, batch_size=1, shuffle=False) test_loader = DataLoader(test_dataset, batch_size=1, shuffle=False) pipeline = Pipeline( config.model_path, config.audio_output_path, config.x_output_path, config.y_output_path, config.z_output_path, ) for subset, loader in zip( ["train", "val", "test"], [train_loader, val_loader, test_loader] ): for i, (data_name, audio, _) in enumerate( tqdm(loader, desc=f"Processing {subset} data:", position=0, leave=True) ): data_name = data_name[0] pipeline.run(audio, data_name, subset)
实现2:无参数run()方法的多实例Pipeline类
- 优点:
run()调用逻辑更简洁 - 疑问:不确定是否应该多次实例化Pipeline对象
train_pipeline = Pipeline( config.x_path, os.path.join(config.audio_output_path, "train"), train_loader, config.fs, ) train_pipeline.run()
实现3:类scikit-learn的可组合Pipeline
- 疑问:如何在Pipeline中实现分支与合并逻辑?不依赖scikit-learn的话该怎么实现?
for subset in train, val, test: for position in positions: for channel in channels: pipeline_steps = [step1(subset), step2(position), step3(channel)] pipeline = Pipeline(pipeline_steps) pipeline.run()
核心疑问
- 针对我的研究场景,有哪些推荐的设计模式?
- 有没有适合参考的GitHub仓库(无需外链,说明仓库类型或名称即可)?
我认为这并非复杂问题,但目前缺乏介于入门级ML项目与生产级Pipeline之间的研究级通用实现共识。
内容的提问来源于stack exchange,提问作者Bryn
相关产品推荐
相关产品推荐

