zoukankan      html  css  js  c++  java
  • PyTorch教程之Tensors

    Tensors类似于numpy的ndarrays,但是可以在GPU上使用来加速计算。

    一、Tensors的构建

    
    
    from __future__ import print_function
    import torch
    构建未初始化的5x3矩阵:
    x = torch.Tensor(5, 3)
    print(x)

    输出结果:

     -2.9226e-26  1.5549e-41  1.5885e+14
     0.0000e+00  7.0065e-45  0.0000e+00
     7.0065e-45  0.0000e+00  4.4842e-44
     0.0000e+00  4.6243e-44  0.0000e+00
     1.5810e+14  0.0000e+00  1.6196e+14
    [torch.FloatTensor of size 5x3]

     构造一个随机初始化的矩阵:

    x = torch.rand(5, 3)
    print(x)

    输出结果:

     0.8168  0.4588  0.8139
     0.7271  0.3067  0.2826
     0.1570  0.2931  0.3173
     0.8638  0.6364  0.6177
     0.2296  0.1411  0.1117
    [torch.FloatTensor of size 5x3]

    查看size:

    print(x.size())

    输出结果:

    torch.Size([5, 3])

    torch.Size 实际上上一个tuple, 因而支持基于tuple的所有运算。

    二、Tensor的运算操作

    Tensor的运算操作语法有很多种,以下一一演示。

    语法1:

    y = torch.rand(5, 3)
    print(x + y)

    输出结果:

     0.9616  0.8727  1.6763
     1.4781  0.7961  1.2082
     0.6717  0.9821  0.6129
     1.2544  1.0118  1.2720
     1.0912  0.3207  0.4200
    [torch.FloatTensor of size 5x3]
    

     语法2:

    print(torch.add(x, y))

    输出结果:

     0.9616  0.8727  1.6763
     1.4781  0.7961  1.2082
     0.6717  0.9821  0.6129
     1.2544  1.0118  1.2720
     1.0912  0.3207  0.4200
    [torch.FloatTensor of size 5x3]

    语法3:

    result = torch.Tensor(5, 3)
    torch.add(x, y, out=result)
    print(result)

    输出结果:

     0.9616  0.8727  1.6763
     1.4781  0.7961  1.2082
     0.6717  0.9821  0.6129
     1.2544  1.0118  1.2720
     1.0912  0.3207  0.4200
    [torch.FloatTensor of size 5x3]

    语法4:

    # adds x to y
    y.add_(x)
    print(y)

    输出结果:

     0.9616  0.8727  1.6763
     1.4781  0.7961  1.2082
     0.6717  0.9821  0.6129
     1.2544  1.0118  1.2720
     1.0912  0.3207  0.4200
    [torch.FloatTensor of size 5x3]

    任何一个会改变 tensor的操作都会加上下划线,例如x.copy_(y)和x.t_().

     语法5:

    print(x[:, 1])

    输出结果:

     0.4588
     0.3067
     0.2931
     0.6364
     0.1411
    [torch.FloatTensor of size 5]

    任何numpy标准库中的索引操作都可以用于tensor

    三、Tensor与numpy的互相转化

     1.从torch Tensor 到 numpy Array

    构建Tensor 

    a = torch.ones(5)
    print(a)

    输出结果:

     1
     1
     1
     1
     1
    [torch.FloatTensor of size 5]

    转化为 Array

    b = a.numpy()
    print(b)

    输出结果:

    [ 1.  1.  1.  1.  1.]

    对Tensor 进行加法操作:

    a.add_(1)
    print(a)
    print(b)

    输出结果:

     2
     2
     2
     2
     2
    [torch.FloatTensor of size 5]
    
    [ 2.  2.  2.  2.  2.]

    可以看到对Tensor进行的加法操作映射到了对应Arrayy当中,二者共用内存,属于浅拷贝。

    2.从numpy Array到 torch Tensor 

    构建和转化的方法与前者类似:

    import numpy as np
    a = np.ones(5)
    b = torch.from_numpy(a)
    np.add(a, 1, out=a)
    print(a)
    print(b)

    输出结果:

    [ 2.  2.  2.  2.  2.]
    
     2
     2
     2
     2
     2
    [torch.DoubleTensor of size 5]

    可以看到对Array进行的加法操作同样映射到了对应Tensor当中,二者共用内存,也属于浅拷贝。

    四、GPU运算

    tensor可以使用CUDA函数移动到GPU上:
    if torch.cuda.is_available():
        x = x.cuda()
        y = y.cuda()
        x + y
    
    

    输出结果:

      0.4457  1.3248  1.9033
      0.8010  1.4461  1.0481
      1.2691  1.8655  0.4001
      0.6913  0.2979  0.2352
      1.0372  1.0988  1.2159
    [torch.cuda.FloatTensor of size 5x3 (GPU 0)]
     
  • 相关阅读:
    Github账户注册的过程
    目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
    作业二:四则运算
    学习进度
    对构建之法的一些问题
    个人介绍
    对《软件工程》课程的总结
    作业八 更新版
    作业八
    冲刺总结博客
  • 原文地址:https://www.cnblogs.com/xueqiuqiu/p/7510658.html
Copyright © 2011-2022 走看看