重新加权神经网络的输入

Re-weight the input to a neural network

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

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

有没有其他方法可以实现?如有任何建议,我们将不胜感激。

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

  1. 在反向传播梯度时显式传递权重。

    在你计算完损失后,当你要反向传播时,你可以将一个 Tensor 传递给 backward() 并且所有后续的梯度将由相应的元素缩放,即做一些事情喜欢

    loss = torch.pow(out-target,2)
    loss.backward(my_weights) # is a Tensor of same dimension as loss
    

但是,如果您想在一个批次中分配单独的权重,则不能使用 nn.module 中的自定义损失函数,它会汇总一个批次中所有样本的损失。

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

    如果你使用 PyTorch 的 data.utils 无论如何,这比乘以你的训练集更简单。但是它没有分配确切的权重,因为它是随机的。但是,如果您对训练集进行足够次数的迭代,它可能就足够接近了。