fastNLP.core.losses

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

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

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

所有loss的基类。如果需要结合到Trainer之中需要实现get_loss方法

get_loss(*args, **kwargs)[源代码]
参数
  • args --

  • kwargs --

返回

torch.Tensor

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

基类 fastNLP.LossBase

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

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

param func

用户自行定义的损失函数,应当为一个函数。

param dict key_map

参数映射表。键为Model/DataSet参数名,值为损失函数参数名。 fastNLP的trainer将在训练时从模型返回值或者训练数据DataSet的target=True的field中 找到相对应的参数名为value的参数,并传入func中作为参数名为key的参数

param kwargs

除了参数映射表以外可以用key word args的方式设置参数映射关系

使用方法:

import torch.nn.functional as F
loss_func = LossFunc(F.cross_entropy, input="pred", target="label")
# 这表示构建了一个损失函数类,由func计算损失函数,其中将从模型返回值或者DataSet的target=True的field
# 当中找到一个参数名为`pred`的参数传入func一个参数名为`input`的参数;找到一个参数名为`label`的参数
# 传入func作为一个名为`target`的参数
get_loss(*args, **kwargs)
参数
  • args --

  • kwargs --

返回

torch.Tensor

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, ignore_idx=- 100, reduction='mean', **kwargs)[源代码]

基类 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 ignore_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.BCEWithLogits(pred=None, target=None, class_in_dim=- 1, reduction='mean')[源代码]

基类 fastNLP.core.LossBase

别名 fastNLP.BCEWithLogits fastNLP.core.losses.BCEWithLogits

二分类交叉熵损失函数, 传入数据之前不需要做sigmoid操作

param pred

参数映射表中 pred 的映射关系,None表示映射关系为 pred -> pred

param target

参数映射表中 target 的映射关系,None表示映射关系为 target -> target

param int class_in_dim

在序列标注的场景中,pred可能的shape为(batch_size, max_len, num_classes)

或(batch_size, num_classes, max_len), BCEWithLogits需要知道哪一维是class的维度以计算loss。如果为-1,就根据pred的第 二维是否等于target的第二维来判断是否需要交换pred的第二维和第三维,因为target的第二维是length的维度,如果这一维度上和pred相等, 那么pred可能第二维也是长度维(存在误判的可能,如果有误判的情况,请显示设置该值)。其它大于0的值则认为该维度是class的维度。 :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, seq_len=None, class_in_dim=- 1, ignore_idx=- 100, reduction='mean')[源代码]

基类 fastNLP.LossBase

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

负对数似然损失函数

__init__(pred=None, target=None, seq_len=None, class_in_dim=- 1, ignore_idx=- 100, reduction='mean')[源代码]
参数
  • pred -- 参数映射表中 pred 的映射关系,None表示映射关系为 pred -> pred

  • target -- 参数映射表中 target 的映射关系,None表示映射关系为 target -> target

  • seq_len -- 句子的长度, 长度之外的token不会计算loss。仅在输出为3d时需要

  • class_in_dim (int) -- 在序列标注的场景中,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 ignore_idx: ignore的index,在计算loss时将忽略target中标号为ignore_idx的内容, 可以通过该值代替

传入seq_len.

参数

reduction (str) -- 支持 meansumnone .

class fastNLP.core.losses.MSELoss(pred=None, target=None, reduction='mean')[源代码]

基类 fastNLP.LossBase

别名 fastNLP.MSELoss fastNLP.core.losses.MSELoss

MSE损失函数

param pred

参数映射表中 pred 的映射关系,None表示映射关系为 pred -> pred

param target

参数映射表中 target 的映射关系,None表示映射关系为 target >`target`

param str reduction

支持'mean','sum'和'none'.

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

返回