美文网首页
什么是pytorch

什么是pytorch

作者: 晨光523152 | 来源:发表于2021-01-19 16:22 被阅读0次

    记录一下自己学 pytorch,学习的资料为 pytorch 的中文文档,传送门:https://pytorch.apachecn.org/docs/1.4/blitz/tensor_tutorial.html

    import torch
    
    #创建一个没有初始化的 5*3 的矩阵
    x = torch.empty(5, 3)
    print(x)
    #输出为:
    tensor([[5.0977e-36, 0.0000e+00, 3.3631e-44],
            [0.0000e+00,        nan, 0.0000e+00],
            [1.1578e+27, 1.1362e+30, 7.1547e+22],
            [4.5828e+30, 1.2121e+04, 7.1846e+22],
            [9.2198e-39, 7.0374e+22, 1.7243e-36]])
    
    #创建一个随机初始化矩阵
    x = torch.rand(5, 3)
    print(x)
    #输出为:
    tensor([[0.5140, 0.5734, 0.9954],
            [0.0649, 0.3278, 0.5843],
            [0.6617, 0.2127, 0.0896],
            [0.5640, 0.0474, 0.9199],
            [0.9848, 0.9213, 0.0807]])
    
    #构建一个填满 0 且数据类型为 long 的矩阵
    x = torch.zeros(5, 3, dtype=torch.long) #long 代表64位整数
    print(x)
    #输出为:
    tensor([[0, 0, 0],
            [0, 0, 0],
            [0, 0, 0],
            [0, 0, 0],
            [0, 0, 0]])
    
    #直接从数据构造张量
    x = torch.tensor([5.5, 3])
    print(x)
    #输出为:
    tensor([5.5000, 3.0000])
    
    #或者根据已有的 tensor 建立新的 tensor。除非用户提供新的值,否则这些方法将重用输入张量的输入,如 dtype 等
    x = x.new_ones(5, 3, dtype=torch.double)
    print(x)
    
    x = torch.randn_like(x, dtype=torch.float)
    print(x)
    #输出为:
    tensor([[1., 1., 1.],
            [1., 1., 1.],
            [1., 1., 1.],
            [1., 1., 1.],
            [1., 1., 1.]], dtype=torch.float64)
    tensor([[ 0.3767,  0.1459,  0.2180],
            [ 0.1992, -0.3858,  0.2903],
            [-0.0805,  0.4341,  0.0535],
            [-1.0695,  1.2416,  2.7940],
            [-0.5688, -0.2928,  1.5203]])
    
    #获取张量的形状
    print(x.size())
    print(x.shape)
    #输出为:
    torch.Size([5, 3])
    torch.Size([5, 3])
    
    #运算
    #一种运算有多种语法,在下面的示例中,我们将研究加法运算
    
    #加法:形式一
    y = torch.rand(5, 3)
    print(x + y)
    
    #加法:形式二
    print(torch.add(x, y))
    
    #加法:形式三/给定一个输出张量作为参数
    result = torch.empty(5, 3)
    torch.add(x, y, out=result)
    print(result)
    
    #加法:形式四/原位,原地操作(in-place)
    y.add_(x)   #notes:任何一个in-place改变张量的操作后面都固定一个 _ 。如:x.copy_(y),x.t_(y)将更改x
    print(y)
    #输出为:
    tensor([[ 1.0236,  0.3053,  1.0644],
            [ 0.7069,  0.0373,  0.5393],
            [ 0.2308,  1.3895,  0.7278],
            [-0.8253,  2.0177,  3.7587],
            [-0.4255,  0.5309,  1.8134]])
    tensor([[ 1.0236,  0.3053,  1.0644],
            [ 0.7069,  0.0373,  0.5393],
            [ 0.2308,  1.3895,  0.7278],
            [-0.8253,  2.0177,  3.7587],
            [-0.4255,  0.5309,  1.8134]])
    tensor([[ 1.0236,  0.3053,  1.0644],
            [ 0.7069,  0.0373,  0.5393],
            [ 0.2308,  1.3895,  0.7278],
            [-0.8253,  2.0177,  3.7587],
            [-0.4255,  0.5309,  1.8134]])
    tensor([[ 1.0236,  0.3053,  1.0644],
            [ 0.7069,  0.0373,  0.5393],
            [ 0.2308,  1.3895,  0.7278],
            [-0.8253,  2.0177,  3.7587],
            [-0.4255,  0.5309,  1.8134]])
    
    #也可以使用像标准的 Numpy 一样的各种索引操作:
    print(x[:,1])
    #输出为:
    tensor([ 0.1459, -0.3858,  0.4341,  1.2416, -0.2928])
    
    #改变形状:如果想改变形状,可以使用 torch.view
    x = torch.randn(4, 4)
    y = x.view(16)
    z = x.view(-1, 8)
    print(x.size(), y.size(), z.size())
    #输出为:
    torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
    
    #如果是仅包含一个元素的 tensor,可以使用 .item() 来得到对应的 python 数值
    x = torch.rand(1)
    print(x)
    print(x.item())
    #输出为:
    tensor([0.7128])
    0.7128415107727051
    
    #桥接 Numpy
    #将一个 Torch 张量转换为一个 Numpy 数组是轻而易举的事情,反之亦然;
    # Torch 张量和 Numpy 数组将共享它们的底层内存位置,因此当一个改变时,另外也会改变。
    
    #将 torch 的 Tensor 转化为 Numpy 数组
    a = torch.ones(5)
    print(a)
    
    b = a.numpy()
    print(b)
    
    a.add_(1)
    print(a)
    print(b) #这意味着改变 torch.tensor 的值,会同时改变其转化为 numpy 的值
    #输出为:
    tensor([1., 1., 1., 1., 1.])
    [1. 1. 1. 1. 1.]
    tensor([2., 2., 2., 2., 2.])
    [2. 2. 2. 2. 2.]
    
    #将 Numpy 数组转化为 Torch 张量
    import numpy as np
    a = np.ones(5)
    b = torch.from_numpy(a)
    np.add(a, 1, out=a)
    print(a)
    print(b)
    # CPU 上的所有张量(CharTensor除外)都支持与 Numpy 的相互转换
    #输出为:
    [2. 2. 2. 2. 2.]
    tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
    
    # CUDA 上的张量
    #张量可以使用 .to 方法移动到任何设备上:
    
    #当 GPU 可用时,我们可以运行一下代码
    #我们将使用 torch.device 来将 tensor 移入和移出 GPU
    if torch.cuda.is_available():
      device = torch.device("cuda")
      y = torch.ones_like(x, device=device)
      x = x.to(device)
      z = x + y
      print(z)
      print(z.to("cpu", torch.double))
    #输出为:
    tensor([1.7128], device='cuda:0')
    tensor([1.7128], dtype=torch.float64)
    

    相关文章

      网友评论

          本文标题:什么是pytorch

          本文链接:https://www.haomeiwen.com/subject/mxfczktx.html