0.概览

目前自己在深度学习这方面有一定的积累,一些代码流程都有一定的套路和相应的标准,这里自己简单梳理一下。

我们这里假设输入为已标注数据,输出为训练的模型,不考虑标注前数据处理部分已经代码上线部署环节。

大致的流程包括:

  • 数据预处理
  • 编写神经网络模型
  • 编写数据加载部分代码
  • 编写模型训练预测代码

1.数据预处理

对标注数据进行处理,包括特征预处理、数据清洗等,将数据(可能是txt格式、Excel文件等)转化为程序可直接读取的常见的数据集类型(如csv)。如在csv文件中,每行是一个样本(sample),每列为该样本特征(feature)或标签(label)。

tes.csv

fuck,shit,label
"a",1.2,"a"
"b",2,"b"
"a",1.2,"a"
"b",2,"b"
"a",1.2,"a"
"b",2,"b"
"a",1.2,"a"
"b",2,"b"
"a",1.2,"a"
"b",2,"b"

2.编写神经网络模型

对于特定的任务,我们可以选择既有的框架,这样就不需要重写模型。然而当既有的框架模型不满足我们的需求时,我们就需要去自定义去编写神经网络模型。

以Pytorch为例,模型需要继承自torch.nn.Module类并实现forward方法。

3.编写数据加载部分代码

数据预处理的结果为数据集文件,我们需要对其进行读取、分割并转化为向量格式。

以Pytorch为例,我们需要编写一个继承自torch.utils.data.Dataset类的类并实现其__getitem__方法和__len__方法。该类作为数据集抽象的接口向外部提供数据。

Dataset类的输出一般不作为模型的输入,中间还需要一个torch.utis.data.DataLoader

DataLoader接收datasetbatch_sizecollate_fndrop_lastshufflesampler等参数,各参数含义为dataset:待加载数据集(类型为torch.utils.data.Dataset)、batch_size:批处理数量大小、collate_fn:数据收集函数(用于将一系列sample转化为Tensor)、drop_last:是否丢弃最后不满一个batch_size的batch、shuffle:是否对数据再进行一次shuffle、sampler:数据采样器(类型为torch.utils.data.Sampler),其中各参数之间可能相互冲突不能一起用,具体使用请参见Pytorch官网教程。

Dataloader的输出应该被作为可以直接传递给模型的Tensor类型,以mini-batch,具体在Python代码中为for-in的形式被调用。

4.编写模型训练预测代码

在生成ModuleDataLoader之后,我们还需要指定损失函数(如torch.nn.functional.cross_entropy(交叉熵损失函数))和优化器(如torch.optim.Adam)。

更高级的,我们还可以去设置学习率调度器(如torch.optim.lr_scheduler.StepLR),设置EarlyStopping和断点重训等功能。

在模型训练完之后我们还需要将其持久化到硬盘中,可以选择保存整个模型对象或者只包含其参数信息。

上面的训练部分由于比较通用,各框架也可能会将其抽象为Trainer对象。

评论




博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Volantis 作为主题,总访问量为
载入天数...载入时分秒...
冀ICP备20001334号