将输入重新加权到神经网络

时间:2017-06-25 04:52:08

标签: pytorch

例如,我将一组图像输入CNN。这些图像的默认权重是1.如何重新加权其中一些图像以使它们具有不同的权重?可以' DataLoader'在pytorch实现这个目标?

我学到了另外两种可能性:

  • 定义自定义损失函数,根据需要为每个样本提供权重。
  • 重复训练集中的样本,这将导致更频繁的样本在最终损失中具有更高的权重。

还有其他办法吗,我们能做到吗?任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我可以想到两种方法来实现这一目标。

  1. 当您反向传播渐变时,明确传递重量。

    在计算损失后,当您即将反向传播时,您可以将Tensor传递给backward(),并且所有后续渐变将由相应元素缩放,即执行某些操作像

    loss = torch.pow(out-target,2)
    loss.backward(my_weights) # is a Tensor of same dimension as loss
    
  2. 但是,如果您使用想要批量分配单个权重,则无法使用nn.module中的自定义损失函数来汇总批次中所有样本的损失。

    1. 使用torch.utils.data.sampler.WeightedRandomSampler

      如果你使用PyTorch的{​​{1}},这比乘以你的训练集更简单。然而,由于它是随机的,它并没有指定精确的权重。但是,如果您在训练集上迭代了足够多次,那么它可能足够接近。