Autograd

1.计算微分并标量输出

前向传播+反向传播计算叶子节点的微分值

import torch

x=torch.ones(2)
#x=[1,1]
x.requires_grad=True
#只有叶子结点的属性值可以被更新
z=4*x
#[4,4]
#求出范式
y= z.norm()
#tensor(5.6569, grad_fn=)
#接下来调用输出节点的backward()函数对整个图进行反向传播,求出微分值
y.backward()
#print(x.grad)
#求出x的微分值,tensor([2.8284, 2.8284])
#z.grad与y.grad的值都没有改变,因为都不是叶子结点

2.非标量输出

import torch

z=torch.ones(2,1)
X=torch.Tensor([[2,3],[1,2]])
#X作为输入的叶子结点
X.requires_grad=True

y=X.mm(z)
#矩阵相乘输出y,print(y)
#tensor([[5.],
#       [3.]], grad_fn=)

#此时调用backward()函数,需要传入一个形状和y一样的全为1的向量
y.backward(torch.ones(2,1))
#print(X.grad)
#tensor([[1., 1.],
#        [1., 1.]])
#对于本例的z,y1=x1+x2,y2=x3+x4,因此y关于X的微分正确

你可能感兴趣的:(Autograd)