计算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())
实验结果表明,对于同一个模型,上述两种方案的输出结果是一样的