pytorch(3)----基本类型Autograd计算图

pytorch 0.4版本之后,torch.autograd.Variable 和torch.Tensor 进行了整合。

基本内容

1、 创建可以自动求导的Tensor,默认为false。requires_grad属性

2、 Tensor 的连个属性:

      grad: 记录该Tensor对应的梯度

      grad_fn: 指向function 对象,记录了该Tensor的操作

3、计算图,根节点、叶子节点、中间节点;判断是否是叶子节点(.is_leaf)

4、计算叶节点梯度,根节点使用 .backward()函数

代码示例

1、

# requires_grad属性,设置为可求导
a = torch.randn(2,2,requires_grad=True)  #默认为false
b = torch.randn(2,2)

print(a.requires_grad,b.requires_grad)
# 使用 .requires_grad_() 将requires_grad 设置为true
# 等价与 b.requires_grad=True
b.requires_grad_()
print(b.requires_grad)

2、

#Tensor 的两个属性
# grad: 记录该Tensor对应的梯度
# grad_fn: 指向function 对象,记录了该Tensor进行过的操作

print(a)
print(b)
c = a+b
print(c)
print(c.requires_grad)

print(a.grad_fn)
print(b.grad_fn)
print(c.grad_fn)

d = c.detach() #.detach() 获取数据,类似于.data(),但前者更安全,后者不会修改autograd的追踪信息
print(d)
print(d.requires_grad)

3、

# 计算图
x = torch.randn(1)
w = torch.ones(1,requires_grad=True)
b = torch.ones(1,requires_grad=True)

print(x.is_leaf,w.is_leaf,b.is_leaf)

y = w*x
z = y+b
print(y.is_leaf,z.is_leaf)
print(y.grad_fn,z.grad_fn)

# 对根节点使用 .backward()可以获得 叶子节点的 梯度
z.backward(retain_graph=True)
print(w.grad)
print(b.grad)

猜你喜欢

转载自www.cnblogs.com/feihu-h/p/12305683.html