zoukankan      html  css  js  c++  java
  • AUTOGRAD: 自动分化(pytorch官网60分钟闪电战第二节)

    import torch
    

    一、Tensor

    该节使用了跟踪张量,当对x进行设置requires_grad=True,那么后续对x的操作都要转换为含x的公式,这样就体现了跟踪这一含义。

    # 创建一个张量并设置requires_grad=True为跟踪张量
    x = torch.ones(2, 2, requires_grad=True)
    print(x)
    # 用户自己创建的没有grad_fn
    print(x.grad_fn)
    # 进行张量运算
    y = x + 2
    # y是由于操作而创建的,因此具有grad_fn
    print(y)
    print(y.grad_fn)
    # 进行更多操作 y
    z = y * y * 3
    out = z.mean()
    
    print(z, out)
    
    # requires_grad 就地更改现有Tensor的标志。输入标志默认为False
    a = torch.ones(2, 2)
    print(a)
    print(a.requires_grad)
    a.requires_grad_(True)
    print(a.requires_grad)
    # 对应位相承,和torch.mul相同,不是矩阵相乘,矩阵相乘是torch.mm
    b = a * a
    print(b)
    b = b.sum()
    print(b)
    print(b.grad_fn)
    

    二、Gradients

    # 1.创建一个张量并设置requires_grad=True为跟踪张量
    x = torch.ones(2, 2, requires_grad=True)
    y = x + 2
    z = y * y * 3
    out = z.mean()
    # print(out)
    # 完成计算后,可以调用.backward()并自动计算所有梯度
    out.backward()
    # 该张量的梯度将累加到.grad属性中,结果应该是z=3(x+2)^2中的x求偏导,最后除以张量大小4,具体过程可参考pytorch官网介绍
    # print(x.grad)
    
    # 2.向量雅可比积
    x = torch.randn(3, requires_grad=True)
    print(x)
    print(x.mean())
    y = x * 2
    # 其实就是先对y中每一项取平方,之后累加,最后取根号
    # y.data.norm() = torch.sqrt(torch.sum(torch.pow(y,2)))
    i = 0
    while y.data.norm() < 1000:
        y = y * 2
        i += 1
    
    print(i)
    print(y)
    
    v = torch.tensor([2, 1, 1], dtype=torch.float)
    # 如果只想要向量-雅可比积,只需将向量传递给 backward作为参数:
    y.backward(v)
    print(x.grad)
    
    print(x.requires_grad)
    print((x ** 2).requires_grad)
    with torch.no_grad():
        print((x ** 2).requires_grad)
    
    print(x.requires_grad)
    # 要停止张量跟踪历史记录,可以调用.detach()将其从计算历史记录中分离出来,并防止跟踪将来的计算。
    y = x.detach()
    print(y.requires_grad)
    print(x.eq(y).all())
    
  • 相关阅读:
    广域网(ppp协议、HDLC协议)
    0120. Triangle (M)
    0589. N-ary Tree Preorder Traversal (E)
    0377. Combination Sum IV (M)
    1074. Number of Submatrices That Sum to Target (H)
    1209. Remove All Adjacent Duplicates in String II (M)
    0509. Fibonacci Number (E)
    0086. Partition List (M)
    0667. Beautiful Arrangement II (M)
    1302. Deepest Leaves Sum (M)
  • 原文地址:https://www.cnblogs.com/ycycn/p/13788359.html
Copyright © 2011-2022 走看看