如何只反向传播部分样本loss

import torch
# 假设预测值为a
a = torch.tensor([1, 2, 3, 4], dtype=torch.float)
a.requires_grad_(True)
# 假设groud truth为[2, 2, 2, 2]
y = torch.tensor([2, 2, 2, 2], dtype=torch.float)
# loss采用L2
loss = (y - a) * (y - a) / 2
print(loss)
gradients = torch.tensor([1, 1, 1, 1], dtype=torch.float)
# loss.backward(gradients)
# print(a.grad)
# 结果为[-1., 0., 1., 2.]
loss[loss<1] = 0
print(loss)
loss.backward(gradients)
print(a.grad)

 结果:

tensor([0.5000, 0.0000, 0.5000, 2.0000], grad_fn=<DivBackward0>)
tensor([0., 0., 0., 2.], grad_fn=<PutBackward>)
tensor([-0., -0.,  0.,  2.])
posted @ 2019-08-03 21:58  Le1B_o  阅读(594)  评论(0编辑  收藏  举报