fastNLP.core.losses

losses 模块定义了 fastNLP 中所需的各种损失函数,一般做为 Trainer 的参数使用。

class fastNLP.core.losses.LossBase[源代码]

别名 fastNLP.LossBase fastNLP.core.losses.LossBase

所有loss的基类。如果想了解其中的原理,请查看源码。

class fastNLP.core.losses.LossFunc(func, key_map=None, **kwargs)[源代码]

基类 fastNLP.LossBase

别名 fastNLP.LossFunc fastNLP.core.losses.LossFunc

提供给用户使用自定义损失函数的类

param func:用户自行定义的损失函数,应当为一个函数或者callable(func)为True的ojbect
param dict key_map:
 参数映射表。键为Model/DataSet参数名,值为损失函数参数名。 fastNLP的trainer将在训练时从模型返回值或者训练数据DataSet的target=True的field中 找到相对应的参数名为value的参数,并传入func中作为参数名为key的参数
param kwargs:除了参数映射表以外可以用key word args的方式设置参数映射关系

使用方法:

func = torch.nn.CrossEntropyLoss()
loss_func = LossFunc(func, input="pred", target="label")
# 这表示构建了一个损失函数类,由func计算损失函数,其中将从模型返回值或者DataSet的target=True的field
# 当中找到一个参数名为`pred`的参数传入func一个参数名为`input`的参数;找到一个参数名为`label`的参数
# 传入func作为一个名为`target`的参数
class fastNLP.core.losses.LossInForward(loss_key='loss')[源代码]

基类 fastNLP.LossBase

别名 fastNLP.LossInForward fastNLP.core.losses.LossInForward

从forward()函数返回结果中获取loss
__init__(loss_key='loss')[源代码]
参数:loss_key (str) -- 在forward函数中loss的键名,默认为loss
class fastNLP.core.losses.CrossEntropyLoss(pred=None, target=None, seq_len=None, class_in_dim=-1, padding_idx=-100, reduction='mean')[源代码]

基类 fastNLP.LossBase

别名 fastNLP.CrossEntropyLoss fastNLP.core.losses.CrossEntropyLoss

交叉熵损失函数

param pred:参数映射表中 pred 的映射关系,None表示映射关系为 pred -> pred
param target:参数映射表中 target 的映射关系,None表示映射关系为 target -> target
param seq_len:句子的长度, 长度之外的token不会计算loss。
param int class_in_dim:
 在序列标注的场景中,pred可能的shape为(batch_size, max_len, num_classes) 或(batch_size, num_classes, max_len), CrossEntropyLoss需要知道哪一维是class的维度以计算loss。如果为-1,就根据pred的第 二维是否等于target的第二维来判断是否需要交换pred的第二维和第三维,因为target的第二维是length的维度,如果这一维度上和pred相等, 那么pred可能第二维也是长度维(存在误判的可能,如果有误判的情况,请显示设置该值)。其它大于0的值则认为该维度是class的维度。
param padding_idx:
 padding的index,在计算loss时将忽略target中标号为padding_idx的内容, 可以通过该值代替 传入seq_len.
param str reduction:
 支持 meansumnone .

Example:

loss = CrossEntropyLoss(pred='pred', target='label', padding_idx=0)
class fastNLP.core.losses.BCELoss(pred=None, target=None, reduction='mean')[源代码]

基类 fastNLP.LossBase

别名 fastNLP.BCELoss fastNLP.core.losses.BCELoss

二分类交叉熵损失函数

param pred:参数映射表中 pred 的映射关系,None表示映射关系为 pred -> pred
param target:参数映射表中 target 的映射关系,None表示映射关系为 target -> target
param str reduction:
 支持 meansumnone .
class fastNLP.core.losses.L1Loss(pred=None, target=None, reduction='mean')[源代码]

基类 fastNLP.LossBase

别名 fastNLP.L1Loss fastNLP.core.losses.L1Loss

L1损失函数

param pred:参数映射表中 pred 的映射关系,None表示映射关系为 pred -> pred
param target:参数映射表中 target 的映射关系,None表示映射关系为 target >`target`
param str reduction:
 支持'mean','sum'和'none'.
class fastNLP.core.losses.NLLLoss(pred=None, target=None, ignore_idx=-100, reduction='mean')[源代码]

基类 fastNLP.LossBase

别名 fastNLP.NLLLoss fastNLP.core.losses.NLLLoss

负对数似然损失函数
__init__(pred=None, target=None, ignore_idx=-100, reduction='mean')[源代码]
参数:
  • pred -- 参数映射表中 pred 的映射关系,None表示映射关系为 pred -> pred
  • target -- 参数映射表中 target 的映射关系,None表示映射关系为 target -> target
  • ignore_idx -- ignore的index,在计算loss时将忽略target中标号为ignore_idx的内容, 可以通过该值代替 传入seq_len.
  • reduction (str) -- 支持 meansumnone .
class fastNLP.core.losses.CMRC2018Loss(target_start=None, target_end=None, context_len=None, pred_start=None, pred_end=None, reduction='mean')[源代码]

基类 fastNLP.LossBase

别名 fastNLP.CMRC2018Loss fastNLP.core.losses.CMRC2018Loss

用于计算CMRC2018中文问答任务。
get_loss(target_start, target_end, context_len, pred_start, pred_end)[源代码]
参数:
  • target_start -- batch_size
  • target_end -- batch_size
  • context_len -- batch_size
  • pred_start -- batch_size x max_len
  • pred_end -- batch_size x max_len
返回: