张量定义
张量定义跟numpy的数组定义类似
import torch torch.randn(5,6) torch.ones(5,1)
自动微分
torch.Tensor
的属性 requires_grad
如果设为 True
, 那么会自动跟踪所有的运算。
停止跟踪梯度方法 .detach()
>>> import torch >>> >>> x = torch.ones(2, 2, requires_grad=True) >>> y = x ** 2 + 4 >>> y tensor([[5., 5.], [5., 5.]], grad_fn=<AddBackward>)
每一个Tensor都有一个.grad_fn
属性,指向创建这个张量的函数,除了用户自己创建的
>>> out = y.mean() >>> out tensor(5., grad_fn=<MeanBackward1>)
当你调用 .backward()
方法时,所有的梯度将会自动计算,并放在 .grad
属性中。
>>> out.backward() >>> x.grad tensor([[0.5000, 0.5000], [0.5000, 0.5000]])
当输出是向量时,需要指定 .backward(v)
参数才能得到雅克比矩阵。
>>> x = torch.ones(4, requires_grad=True) >>> out = x * 2 >>> out.backward(torch.tensor([1, 1, 1, 1], dtype=torch.float)) >>> x.grad tensor([2., 2., 2., 2.])
禁止跟踪梯度
with torch.no_grad(): print((x ** 2).requires_grad)