1. 将一个4x4的张量resize成一个一维张量

    1
    import torch
    2
    a = torch.rand(4, 4).view(16)
    3
    a.size()

    运行结果

    1
    torch.Size([16])
  1. 将一个4x4的张量resize成一个2x8的张量

    1
    a = torch.rand(4, 4).view((2,-1))
    2
    a.size()

    运行结果

    1
    torch.Size([2, 8])
  1. 从张量中取出数字

    1
    a = torch.rand(1)
    2
    a.item()

    运行结果

    1
    0.2103900909423828
  1. 将张量装换成numpy数组

    1
    a = torch.rand(4, 4)
    2
    a = a.numpy()
    3
    a

    运行结果

    1
    array([[0.8020465 , 0.6433286 , 0.8768645 , 0.11901444],
    2
           [0.7810658 , 0.9912449 , 0.16681737, 0.16454577],
    3
           [0.19409567, 0.08386511, 0.2835585 , 0.6073738 ],
    4
           [0.7847471 , 0.30840635, 0.20832407, 0.18062735]], dtype=float32)
  1. 将张量+1,并观察上题中numpy数组的变化

    1
    a = a + 1
    2
    a

    运行结果

    1
    array([[1.8020465, 1.6433287, 1.8768644, 1.1190145],
    2
           [1.7810658, 1.9912449, 1.1668174, 1.1645458],
    3
           [1.1940956, 1.0838652, 1.2835585, 1.6073737],
    4
           [1.7847471, 1.3084064, 1.2083241, 1.1806273]], dtype=float32)
  1. 从numpy数组创建张量

    1
    import numpy as np
    2
    a = np.ones([4, 4])
    3
    b = torch.tensor(a)
    4
    b

    运行结果

    1
    tensor([[1., 1., 1., 1.],
    2
            [1., 1., 1., 1.],
    3
            [1., 1., 1., 1.],
    4
            [1., 1., 1., 1.]], dtype=torch.float64)
  1. 将numpy数组+1并观察上题中张量的变化

    1
    a += 1
    2
    print(a)
    3
    print(b)

    运行结果

    1
    [[2. 2. 2. 2.]
    2
     [2. 2. 2. 2.]
    3
     [2. 2. 2. 2.]
    4
     [2. 2. 2. 2.]]
    5
    tensor([[1., 1., 1., 1.],
    6
            [1., 1., 1., 1.],
    7
            [1., 1., 1., 1.],
    8
            [1., 1., 1., 1.]], dtype=torch.float64)
  1. 新建一个张量,并设置requires_grad=True

    1
    x = torch.rand(4, 4, requires_grad=True)
    2
    x

    运行结果

    1
    tensor([[0.9211, 0.6011, 0.3496, 0.5043],
    2
            [0.0785, 0.2188, 0.9145, 0.3624],
    3
            [0.2995, 0.6557, 0.7666, 0.6992],
    4
            [0.9952, 0.6867, 0.9104, 0.0115]], requires_grad=True)
  1. 对张量进行任意操作(y = x + 2)

    1
    y = x + 2
    2
    y

    运行结果

    1
    tensor([[2.9211, 2.6011, 2.3496, 2.5043],
    2
            [2.0785, 2.2188, 2.9145, 2.3624],
    3
            [2.2995, 2.6557, 2.7666, 2.6992],
    4
            [2.9952, 2.6867, 2.9104, 2.0115]], grad_fn=<AddBackward0>)
  1. 再对y进行任意操作

    1
    out = y * 2
  2. 对out进行反向传播

    1
    out.backward(torch.ones_like(out))
  3. 打印梯度d(out)/dx

    1
    x.grad

    运行结果

    1
    tensor([[5., 5., 5., 5.],
    2
            [5., 5., 5., 5.],
    3
            [5., 5., 5., 5.],
    4
            [5., 5., 5., 5.]])
  1. 创建一个结果为矢量的计算过程(y=x*2^n)

    1
    x = torch.rand(3, requires_grad=True)
    2
    n = 10
    3
    y = x * 2 ** n
    4
    y

    运行结果

    1
    tensor([492.7599, 348.5622, 485.4855], grad_fn=<MulBackward0>)
  1. 计算v = [0.1, 1.0, 0.0001]处的梯度

    1
    v = torch.tensor([0.1, 1.0, 0.0001])
    2
    y.backward(v)
    3
    print(x.grad)

    运行结果

    1
    tensor([1.0240e+02, 1.0240e+03, 1.0240e-01])
  1. 关闭梯度的功能

    1
    x = torch.rand([1], requires_grad=True)
    2
    with torch.no_grad():
    3
        y = x * 2
    4
    y.requires_grad

    运行结果

    1
    False