NumPy中的对数似然函数

时间:2019-04-23 23:19:02

标签: python numpy pytorch loss-function

我关注了this tutorial 我对作者定义负对数似然损失函数的部分感到困惑。

def nll(input, target):
    return -input[range(target.shape[0]), target].mean()

loss_func = nll

这里,target.shape[0]64,而target是长度为64的向量

tensor([5, 0, 4, 1, 9, 2, 1, 3, 1, 4, 3, 5, 3, 6, 1, 7, 2, 8, 6, 9, 4, 0, 9, 1, 1, 2, 4, 3, 2, 7, 3, 8, 6, 9, 0, 5, 6, 0, 7, 6, 1, 8, 7, 9, 3, 9, 8, 5, 9, 3, 3, 0, 7, 4, 9, 8, 0, 9, 4, 1, 4, 4, 6, 0])

该numpy索引如何导致损失函数?而且,当方括号内有range()和另一个数组时,numpy数组的输出应该是什么?

1 个答案:

答案 0 :(得分:1)

在本教程中,inputtarget均为torch.tensor

对数似然损失的负值计算如下:

nll = -(1/B) * sum(logPi_(target_class)) # for all sample_i in the batch.

位置:

  • B:批量大小
  • C:课程数量
  • Pi:形状为[num_classes,]个样本i的预测概率矢量。通过样本logit的{​​{1}}向量的softmax值获得。
  • ilogPi的对数,我们可以简单地通过Pi来获取它。

让我们分解为一个简单的例子:

  • F.log_softmax(logit_i)input的值,形状为log_softmax
  • [B, C]是形状为target的地面真理类。
  

为了减少混乱,让我们以[B, ]B = 4为例。

C = 3

两种计算方式相似。希望这会有所帮助。