zoukankan      html  css  js  c++  java
  • [pytorch][进阶之路]pytorch学习笔记一

    1. Tensor是一个高维数组,可以通过GPU加速运算

    import torch as t
    
    x = t.Tensor(5, 3) # 构建Tensor
    x = t.Tensor([[1,2],[3,4]]) # 初始化Tendor
    x = t.rand(5, 3) # 使用[0,1]均匀分布随机初始化二维数组
    print(x.size()) # 查看x的形状
    x.size()[1], x.size(1) # 查看列的个数, 两种写法等价
    

    torch.Size 是tuple对象的子类,因此它支持tuple的所有操作,如x.size()[0]

    2. 加法的三种表示

    x + y # 运算符式
    t.add(x, y) #对象方法式
    
    #函数式
    result = t.Tensor(5, 3) # 预先分配空间
    t.add(x, y, out=result) # 输入到result
    

    注意,函数名后面带下划线_ 的函数会修改Tensor本身。返回新对象和原地运算。

    3. Tensor与Numpy

    import numpy as np
    b = a.numpy() # Tensor -> Numpy
    a = np.ones(5)
    b = t.from_numpy(a) # Numpy->Tensor
    

    Tensor和numpy对象共享内存,所以他们之间的转换很快,而且几乎不会消耗什么资源。但这也意味着,如果其中一个变了,另外一个也会随之改变。

    4. 标量和向量

    scalar = b[0] # 标量
    scalar.size() #0-dim
    scalar.item() # 使用scalar.item()能从中取出python对象的数值
    
    tensor = t.tensor([2]) # 注意和scalar的区别
    tensor,scalar #(tensor([ 2]), tensor(2., dtype=torch.float64))
    tensor.size(),scalar.size()  #(torch.Size([1]), torch.Size([]))
    
    old_tensor = tensor
    new_tensor = t.tensor(old_tensor)
    new_tensor[0] = 1111
    old_tensor, new_tensor
    

    需要注意的是,t.tensor()总是会进行数据拷贝,新tensor和原来的数据不再共享内存。所以如果你想共享内存的话,建议使用torch.from_numpy()或者tensor.detach()来新建一个tensor, 二者共享内存。

    5. GPU加速

    Tensor可通过.cuda 方法转为GPU的Tensor,从而享受GPU带来的加速运算。

    device = t.device("cuda:0" if t.cuda.is_available() else "cpu")
    x = x.to(device)
    y = y.to(device)
    z = x+y
    

    此外,还可以使用tensor.cuda() 的方式将tensor拷贝到gpu上,但是这种方式不太推荐。

  • 相关阅读:
    【并查集】亲戚
    【图论】Car的旅行线路 NOIP 2001
    【贪心】排座椅
    【DP】花店橱窗布置
    【NOIP】NOIP考纲总结+NOIP考前经验谈
    【NOIP】考前须知
    NOIP 2016 PJ T4 魔法阵
    NOIP 2016 PJ T3 海港
    【高精度】麦森数 NOIP 2003
    【带权并查集】食物链 NOIP 2001
  • 原文地址:https://www.cnblogs.com/wildkid1024/p/11106929.html
Copyright © 2011-2022 走看看