先上测试代码
if __name__=='__main__':
# scene_graph_token()
tensor1 = torch.rand(4,4)
#tensor1.requires_grad_(True)
tensor2 = torch.rand(4)
tensor2.requires_grad_(True)
opt=torch.optim.Adam([tensor2],lr=0.1)
for i in range(50):
tensor1[2,:]=tensor2
tensor3=tensor1*2
tensor3=tensor3.view(-1)
sum=torch.sum(tensor3,dim=0)
print(sum.data)
print(tensor2.data)
opt.zero_grad()
sum.backward(retain_graph=True)
opt.step()
pass
解释 :
tensor2是有一行4个数
然后赋值给tensor1的第三行
tensor1简单做了个乘2的运算
然后把tensor1所有数加起来,我们的目标是让这个 和 变小
上结果!
这里输出不太好看,大家凑活看,反正这个和是变小了。
同时输出tensor2,它的值也是在变化
结论:
梯度能正常反向传播
所以大家不必担心梯度问题,pytorch已经为大家封装好了