本文认为一个深度学习项目开发的主要工作量可以分为模型组网、数据载入和训练脚本三个部分。
1. 模型组网
本步骤实现模型的定义,基于所使用的深度学习框架,使用其提供的API构建自己的深度学习模型。 以pytorch为例,定义模型继承自基类nn.Module ,然后实现构造函数 和前向forward() 。 完成后可构造fake_data验证输入输出是否符合预期;
工作量: 与模型的复杂程度和开发人员对API的熟悉程度有关。
2. 数据载入
本步骤实现数据集的读取方式,主要实现MyDataset 和调用Dataloader 。
train_ds = MyDataset(train_set_path, tokenizer)
train_loader = DataLoader(dataset=train_ds,
batch_size=args.batch_size,
shuffle=False,
collate_fn=collate_fn,
num_workers=args.workers)
MyDataset 类继承自torch.utils.data.dataset.Dataset ,构造函数实现从文件中读取数据的过程,__getitem__(self, idx) 实现单个数据样本的结构。 Dataloader 来自torch.utils.data.dataloader ,使用for循环可每次从中取出一个batch的数据。 参数中的collate_fn 为一个函数,实现一个batch数据在读取时进行的预处理,如padding、tensor类型转换等。
工作量: 与数据集的处理要求相关。
3. 训练脚本
本部分建议采用现有的脚本模板进行开发。 需要定义超参数、损失函数、评价指标,实现训练过程、评估过程、模型存储等。 最终该训练脚本为一个项目的运行入口。 工作量: 与模板的易用程度相关。
|