adaptive_log_softmax_with_loss

paddle.nn.functional. adaptive_log_softmax_with_loss ( input, label, head_weight, tail_weights, cutoffs, head_bias=None, name=None ) [源代码]

计算自适应 logsoftmax 结果以及 input 和 label 之间的负对数似然。参数 head_weighttail_weightscutoffs`和 `head_biasAdaptiveLogSoftmaxWithLoss 的内部成员。 请参考:AdaptiveLogSoftmaxWithLoss

参数

  • input (Tensor): 输入张量,数据类型为 float32 或 float64。

  • label (Tensor): 标签张量,数据类型为 float32 或 float64。

  • head_weight (Tensor): 用于线性计算的权重矩阵,数据类型为 float32 或 float64。

  • tail_weights (Tensor): 用于线性计算的权重矩阵,数据类型为 float32 或 float64。

  • cutoffs (Sequence): 用于将 label 分配到不同存储桶的截断值。

  • head_bias (Tensor, 可选): 用于线性计算的偏置矩阵,数据类型为 float32 或 float64。

  • name (str, 可选): 具体用法请参见 Name,一般无需设置,默认值为 None。

返回

  • output (Tensor): - 自适应 logsoftmax 计算结果,形状为[N]。

  • loss (Tensor): - input 和 label 之间的 logsoftmax 损失值。

代码示例

>>> import paddle
>>> import paddle.nn.functional as F

>>> paddle.seed(2024)
>>> input = paddle.randn([3, 5], dtype=paddle.float32)
>>> head_weight = paddle.randn([5, 3], dtype=paddle.float32)
>>> head_bias = paddle.randn([3], dtype=paddle.float32)
>>> tail_weights = []
>>> tail_weights.append(paddle.randn([5, 2], dtype=paddle.float32))
>>> tail_weights.append(paddle.randn([2, 1], dtype=paddle.float32))
>>> out, loss = F.adaptive_log_softmax_with_loss(input, paddle.full((3,), 1, dtype='int64'), head_weight, tail_weights, cutoffs=[2], head_bias=head_bias)
>>> print(out)
Tensor(shape=[3], dtype=float32, place=Place(cpu), stop_gradient=True,
[-0.99842924, -2.27753878, -0.16740258])
>>> print(loss)
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
1.14779019)