源自 PyTorch 1.4教程
Outline
PyTorch中,所有神经网络的核心是 autograd 包
torch.Tensor 是这个autograd的核心类
一个张量Tensor通常记录的属性如下:
参见Pytorch autograd,backward详解
a = torch.randn(2, 2)
a = ((a * 3) / (a - 1))
print(a.requires_grad)
a.requires_grad_(True)
print(a.requires_grad)
#输出
False
True
x=torch.tensor(1.0,requires_grad=True)
y=torch.tensor(2.0,requires_grad=True)
z=x+y
print(x,y,z)
#输出
tensor(1., requires_grad=True) tensor(2., requires_grad=True) tensor(3., grad_fn=)
源代码接口
torch.autograd.backward(
tensors,
grad_tensors=None,
retain_graph=None,
create_graph=False)
x=torch.tensor(3.0,requires_grad=True)
y=torch.tensor(7.0,requires_grad=True)
z=x+y
z.backward()
#返回x,y的梯度,z的值
print(x.grad,y.grad,z)
#输出
tensor(1.) tensor(1.) tensor(10., grad_fn=)
x=torch.ones(4,requires_grad=True) #x=[x1,x2,x3,x4]
#print(x.type()) torch.FloatTensor
z=x+2 #z=[x1+2,x2+2,x3+2,x4+2]
#若传入的都是1
z.backward(torch.ones_like(z))
#若传入的是自己设定的
#z.backward(torch.Tensor([1,2,3,4])) #z=[x1+2,2(x2+2),3(x3+2),4(x4+2)] 注意类型的匹配 Tensor默认为torch.FloatTensor型
#z.backward(torch.tensor([1.,2.,3.,4.])) #z=[x1+2,2(x2+2),3(x3+2),4(x4+2)]
print(x.grad)
#输出
tensor([1., 1., 1., 1.])
#tensor([1., 2., 3., 4.])
在写的过程中发现tensor和Tensor原来是不一样的
参见【PyTorch】Tensor和tensor的区别
下节写如何构建神经网络
欢迎批评指正,一起学习进步!!!