fairseq源码分析(三)——fairseq的task

本文介绍了fairseq中的Task组件,详细阐述了Task的功能及其在训练流程中的作用,包括数据集处理、模型初始化、损失函数计算等方面,并说明了如何自定义Task。

本想第三篇博客中详细的讨论一下模型的训练流程,但其中涉及许多的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():执行一次前向传播与反向传播并返回loss
  • valid_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注册机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值