本想第三篇博客中详细的讨论一下模型的训练流程,但其中涉及许多的task、model、criterions、generate等细节,所以打算先将fairseq的一些基础组件介绍清楚,再进行整体流程的介绍。
什么是Task?
fairseq对task的解释如下:
Tasks store dictionaries and provide helpers for loading/iterating over
Datasets, initializing the Model/Criterion and calculating the loss.
可以看到,task是贯穿整个训练过程的一个组件,其包括字典的存储与数据集处理、模型的初始化与指标、损失函数的计算等等。
一个Task应该包括如下方法:
数据集相关:
load_dictionary():从指定的文件加载字典build_dictionary():构建字典setup_task():设置任务,做一些初始化相关的任务load_dataset():加载数据集dataset():返回加载好的数据集划分get_batch_iterator:获取batch生成器
模型相关:
build_model():构建模型实例build_criterion():构建训练指标build_generator():构造生成器
训练相关:
train_step():执行一次前向传播与反向传播并返回lossvalid_step():执行一次验证步,过程与训练步类似inference_step():执行一次推断步
分类
fairseq为我们内置了许多task,包括:
- language modeling
- multilingual translation
- translation
- translation moe
同时我们可以定制自己的任务,定制自己的任务只要通过@register_task('translation_moe')这个装饰器来修饰自己的Task类即可,task类中应包含上面提到的方法。
fairseq是怎么知道我们的task?
fairseq中的task是通过task包下的__init__.py暴露给模型的,对于__init__.py的讲解请看上一篇博客关于注册机制的讲解
fairseq源码分析(二)——fairseq注册机制
本文介绍了fairseq中的Task组件,详细阐述了Task的功能及其在训练流程中的作用,包括数据集处理、模型初始化、损失函数计算等方面,并说明了如何自定义Task。
——fairseq的task&spm=1001.2101.3001.5002&articleId=115367543&d=1&t=3&u=1908d63c6af84ccf9c3f801f23dae917)
1039

被折叠的 条评论
为什么被折叠?



