一、requires_grad
requires_grad是tensor类的一个属性,默认是false。可以在初始化时用requires_grad参数来确定,也可以通过tensor.requires_grad_(bool)函数来改变既有tensor是否需要自动求导。
x=torch.ones(3,2)
print(x.requires_grad)
y=torch.ones(3,2,requires_grad=True)
print(y.requires_grad)
x.requires_grad_(True)
x
二、grad_fn
tensor类的一个属性,如果是用户自己定义的tensor,则grad_fn=None,否则grad_fn记录了这个张量是如何获得的。
#grad_fn
x=torch.ones(3,2)
new=x+y
print(x.grad_fn)
print(new.grad_fn)
三、反向传播与梯度计算
如果t是【一个数字组成的tensor】,可以用t.backward()
然后所有计算图中t之前的tensor的grad属性都会更新
#grad
x=torch.ones(2,3,requires_grad=True)
y=torch.ones(2,3,requires_grad=True)
print(x.grad)
z=(x+y*2).mean()
z.backward()
print(x.grad)
print(y.grad)
四、tensor.detach()
可以通过.detach()获得一个新的Tensor, 拥有相同的内容但不需要自动求导.
#grad
x=torch.ones(2,3,requires_grad=True)
y=torch.ones(2,3,requires_grad=True)
x1=x.detach()
print(x.requires_grad)
print(x1.requires_grad)
z=(x1+y*3).mean()
z.backward()
print(y.grad)#更新
print(x1.grad)#none
另外有:with torch.no_grad():采用代码块的方式也可以终止对计算图的回溯