美文网首页
1 Pytorch&Tensor

1 Pytorch&Tensor

作者: 许志辉Albert | 来源:发表于2021-02-02 09:49 被阅读0次

    1.Pytorch与张量

    %matplotlib inline
    

    2.PyTorch是什么

    PyTorch是一个基于Torch的Python开源机器学习库,用于深度学习神经网络构建AI应用程序。 它主要由Facebook的人工智能研究小组开发。Uber的"Pyro"也是使用的这个库。

    PyTorch是一个Python包,提供两个高级功能:

    • 具有强大的GPU加速的张量计算(如NumPy),可以使用GPU的强大计算能力
    • 包含自动求导系统的的深度神经网络

    2.1 开始

    2.1.1 Tensors(张量)

    Tensors与Numpy中的 ndarrays类似,但是在PyTorch中
    Tensors 可以使用GPU进行计算.

    神经网络其实底层就是很多的tensor计算


    1 2
    from __future__ import print_function
    import torch
    

    创建一个5*3的矩阵 但并未初始化

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

    创建一个随机初始化矩阵

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

    创建一个0填充的矩阵,数据类型为long:

    x = torch.zeros(5,3,dtype = torch.long)
    print(x)
    
    5

    创建tensor并使用现有数据初始化

    x = torch.tensor([5.5 , 3])
    print(x)
    
    6

    根据现有的张量创建矩阵。这些方法将重用输入张量的属性,例如 dtype,除非设置新的值进行覆盖

    x = x.new_ones(5,3 , dtype = torch.double)  #new_*方法创建对象
    print(x)
    
    x = torch.randn_like(x , dtype = torch.float) #覆盖 dtype
    print(x)      #对象的size是相同的,知识值和类型发生了变化
    
    7

    获取 size

    使用size方法与Numpy的shape属性返回的相同,张量也支持shape属性,后面会详细介绍

    print(x.size())
    
    8

    torch.Size 返回值是 tuple类型, 所以它支持tuple类型的所有操作.

    操作
    操作有多种语法。

    我们将看一下加法运算。

    加法1:

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

    加法2:

    print(torch.add(x,y))
    
    10

    提供输出tensor作为参数

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

    替换

    #add x to y
    y.add(x)
    print(y)
    
    12

    任何以"" 结尾的操作都会用结果替换原变量,例如:"x.copy(y)" , "x.t_()" , 都会改变"x"

    你可以使用与Numpy索引方式相同的操作来进行对张量的操作

    print(x[: , 1])
    
    13

    torch.view: 可以改变张量的维度和大小

    torch.view 与Numpy 的reshape类似

    x = torch.randn(4,4)
    y = x.view(16)
    z = x.view(-1,8) #size -1 从其他维度推断
    print(x.size() , y.size() , z.size())
    
    14

    如果你有只有一个元素的张量,使用 .item来得到Python数据类型的数值

    x = torch.randn(1)
    print(x)
    print(x.item())
    
    
    15

    2.2Numpy转换

    Converting a Torch Tensor to a NumPy array and vice versa is a breeze.

    The Torch Tensor and NumPy array will share their underlying memory
    locations, and changing one will change the other.

    Converting a Torch Tensor to a NumPy Array

    a = torch.ones(5)
    print(a)
    
    16
    b = a.numpy()
    print(b)
    
    17

    See how the numpy array changed in value.

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

    NumPy Array 转化成 Torch Tensor

    使用from_numpy自动转化

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

    所有的Tensor 类型默认都是基于CPU , CharTensor 类型不支持到Numpy的转换

    2.3 CUDA张量

    使用.to方法,可以将Tensor移动到任何设备中

    # is_available 函数判断是否有cuda可以使用
    # ``torch.device``将张量移动到指定的设备中
    if torch.cuda.is_available():
        device = torch.device("cuda")          # a CUDA 设备对象
        y = torch.ones_like(x, device=device)  # 直接从GPU创建张量
        x = x.to(device)                       # 或者直接使用``.to("cuda")``将张量移动到cuda中
        z = x + y
        print(z)
        print(z.to("cpu", torch.double))       # ``.to`` 也会对变量的类型做更改
    
    20

    相关文章

      网友评论

          本文标题:1 Pytorch&Tensor

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