pytorch计算模型关于输入数据的梯度

计算GPU模型关于输入的梯度

device = torch.device('cuda:0')
I1 = torch.cat([Train1, d1], dim = 1)
# 注意y = Variable(t.cuda())生成一个节点y
# y = Variable(t).cuda(),生成两个计算图节点t和y
# 所以下面的to(device)一定要写括号里面
v1 = Variable(I1.to(device), requires_grad=True)
r1 = model1(v1)
r1.backward(torch.ones(v1.size()).double().to(device))
print(v1.grad.cpu().data.numpy())

计算CPU模型关于输入的梯度

model1 = model1.to('cpu')
v1 = Variable(I1, requires_grad=True)
r1 = model1(v1)
r1.backward(torch.ones(v1.size()).double())
print(v1.grad.data.numpy())

实验结果表明,对于同一个模型,上述两种方案的输出结果是一样的

猜你喜欢

转载自blog.csdn.net/jining11/article/details/103921839