日新月异 PyTorch - pytorch 基础: 自动求导

源码 https://github.com/webabcd/PytorchDemo
作者 webabcd

日新月异 PyTorch - pytorch 基础: 自动求导

示例如下:

basic\demo02.py

import torch
import math

# 自动求导的简单说明
def sample1():
    # requires_grad 用于表示是否需要自动求导
    k = torch.tensor(1.23, requires_grad=True)
    x = torch.tensor(4.56, requires_grad=True)
    b = torch.tensor(7.89, requires_grad=True)
    y = k*x + b
    # 反向传播以便自动计算梯度
    y.backward()
    # 获取 x 的导数(对于一次函数来说,x 的导数就是斜率 k)
    print(x.grad) # tensor(1.2300)

    x = torch.tensor(0., requires_grad=True)
    y = torch.sin(x)
    y.backward()
    # sin(x) 的导数是 cos(x)
    print(x.grad) # tensor(1.)

    x = torch.tensor([0, math.pi/2, math.pi, math.pi/2*3, math.pi*2], requires_grad=True)
    y = torch.sin(x)
    # 标量可以直接 backward()
    # 但是这里的 y 是个矢量,对于非标量来说,其在调用 backward() 时要传入相同形状的参数
    y.backward(torch.ones(5))
    # sin(x) 的导数是 cos(x)
    print(x.grad) # tensor([ 1.0000e+00, -4.3711e-08, -1.0000e+00,  1.1925e-08,  1.0000e+00])

    x = torch.tensor(1.11, requires_grad=True)
    y = x * 2
    y = y * 2
    y = y * 2
    y.backward()
    # 张量的所有梯度将会自动累加到​​.grad​​ 属性
    print(x.grad) # tensor(8.)
    

if __name__ == '__main__':
    # 自动求导的简单说明
    sample1()


源码 https://github.com/webabcd/PytorchDemo
作者 webabcd

posted @ 2024-09-24 15:07  webabcd  阅读(18)  评论(0编辑  收藏  举报