当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PyTorch NLLLoss用法及代码示例


本文简要介绍python语言中 torch.nn.NLLLoss 的用法。

用法:

class torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='mean')

参数

  • weight(Tensor,可选的) -给每个类一个手动重新调整的权重。如果给定,它必须是大小为 C 的张量。否则,它被视为拥有所有的。

  • size_average(bool,可选的) -已弃用(请参阅reduction)。默认情况下,损失是批次中每个损失元素的平均值。请注意,对于某些损失,每个样本有多个元素。如果字段 size_average 设置为 False ,则会对每个小批量的损失求和。当 reduceFalse 时忽略。默认值:True

  • ignore_index(int,可选的) -指定一个被忽略且不影响输入梯度的目标值。当 size_averageTrue 时,损失是在非忽略目标上的平均值。

  • reduce(bool,可选的) -已弃用(请参阅reduction)。默认情况下,根据 size_average 对每个小批量的观察结果进行平均或求和。当 reduceFalse 时,返回每个批次元素的损失并忽略 size_average 。默认值:True

  • reduction(string,可选的) -指定要应用于输出的缩减:'none' | 'mean' | 'sum''none' :不应用减少,'mean':取输出的加权平均值,'sum':输出将被求和。注意:size_averagereduce 正在被弃用,同时,指定这两个参数中的任何一个都将覆盖 reduction 。默认值:'mean'

负对数似然损失。用C 类训练分类问题很有用。

如果提供,可选参数 weight 应该是一维张量,为每个类分配权重。当你有一个不平衡的训练集时,这特别有用。

通过前向调用给出的input 预计将包含每个类的log-probabilities。 input 必须是大小为 的张量,对于 K 维情况, 。后者对于更高维度的输入很有用,例如为 2D 图像计算 NLL 损失 per-pixel。

通过在网络的最后一层添加 LogSoftmax 层,可以轻松地在神经网络中获得 log-probabilities。如果您不想添加额外的图层,您可以改用CrossEntropyLoss

此损失预期的 target 应该是 范围内的类索引,其中 C = number of classes ;如果指定了ignore_index,这个损失也接受这个类索引(这个索引可能不一定在类范围内)。

未减少的(即 reduction 设置为 'none' )损失可以说明为:

其中 是输入, 是目标, 是权重, 是批量大小。如果 reduction 不是 'none' (默认 'mean' ),那么

形状:
  • 输入: ,其中 C = number of classes K 维损失的情况下。

  • 目标: ,其中每个值为 ,或在 K-dimensional 丢失的情况下为

  • 输出:如果 reduction'none' ,则在 K-dimensional 丢失的情况下使用 形状 。否则,标量。

例子:

>>> m = nn.LogSoftmax(dim=1)
>>> loss = nn.NLLLoss()
>>> # input is of size N x C = 3 x 5
>>> input = torch.randn(3, 5, requires_grad=True)
>>> # each element in target has to have 0 <= value < C
>>> target = torch.tensor([1, 0, 4])
>>> output = loss(m(input), target)
>>> output.backward()
>>>
>>>
>>> # 2D loss example (used, for example, with image inputs)
>>> N, C = 5, 4
>>> loss = nn.NLLLoss()
>>> # input is of size N x C x height x width
>>> data = torch.randn(N, 16, 10, 10)
>>> conv = nn.Conv2d(16, C, (3, 3))
>>> m = nn.LogSoftmax(dim=1)
>>> # each element in target has to have 0 <= value < C
>>> target = torch.empty(N, 8, 8, dtype=torch.long).random_(0, C)
>>> output = loss(m(conv(data)), target)
>>> output.backward()

相关用法


注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torch.nn.NLLLoss。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。