Pytorch基础:自动求导

Pytorch 自动求导

深度学习的算法本质上是通过反向传播求导数,而Pytorch的autograd模块实现了此功能。在Tensor上的所有操作,autograd均能为它们提供自动微分

# 在创建张量的时候,可以通过指定requires_grad=True标识,进行自动求导,Pytorch会记录该张量的每一步操作历史,并自动计算
import torch

x = torch.rand(3, 3, requires_grad=True)
x
tensor([[0.0803, 0.9218, 0.3219],
        [0.8003, 0.1912, 0.9332],
        [0.6010, 0.2762, 0.0237]], requires_grad=True)
y = torch.rand(3, 3, requires_grad=True)
y
tensor([[0.1794, 0.3274, 0.1144],
        [0.5815, 0.3099, 0.3854],
        [0.0383, 0.7856, 0.2387]], requires_grad=True)
z = torch.sum(x + y)
z
tensor(7.1100, grad_fn=<SumBackward0>)
# 简单的自动求导
z.backward()
print(x.grad, y.grad)
tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]]) tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]])
# 复杂的自动求导
x = torch.rand(3, 3, requires_grad=True)
y = torch.rand(3, 3, requires_grad=True)
z = y**2 + x**3
z
tensor([[0.2509, 1.5016, 0.7266],
        [0.1246, 0.9339, 0.3272],
        [1.0595, 0.4782, 0.0501]], grad_fn=<AddBackward0>)
z.backward(torch.ones_like(x))
x.grad
tensor([[0.8078, 2.2859, 2.1076],
        [0.4714, 2.6892, 0.8068],
        [2.2977, 0.2319, 0.0336]])

使用with torch.no_grad()禁止对已设置requires_grad=True的张量进行自动求导,一般应用在计算测试集准确率时

with torch.no_grad():
    print((x + y * 2).requires_grad)
False
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章