• 2-1 张量数据结构


    张量概念

    张量是什么?
    单个元素叫标量(scalar),一个序列叫向量(vector),多个序列组成的平面叫矩阵(matrix),多个平面组成的立方体叫张量(tensor)。在深度学习中,标量、向量、矩阵、高维矩阵都统称为张量。在pytorch中,一个Tensor内部包含数据和导数两部分。

    Pytorch的基本数据结构是张量Tensor。张量即多维数组。Pytorch的张量和numpy中的array很类似。
    在Pytorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码。最重要的是,数据转化为张量可以方便在GPU上运行,这样运行速度可以大大加快。

    一、张量的数据类型(如何创建张量)

    torch.float64(torch.double),
    torch.float32(torch.float), 最常用
    torch.float16,
    torch.int64(torch.long),
    torch.int32(torch.int),
    torch.int16,
    torch.int8,
    torch.uint8,
    torch.bool
    可以直接使用指定类型
    image.png
    **也使用特定函数创建:**torch.IntTensor()、torch.tensor()(等价于torch.FloatTensor)、torch.BoolTensor()
    注意:
    torch.IntTensor(3)创建的张量并不是 tensor(3)或者tensor([3]),而是随机的三个整数
    image.png
    image.png
    torch.Tensor()参数:
    data:data的数据类型可以是列表list、元组tuple、numpy数组ndarray、纯量scalar(又叫标量)和其他的一些数据类型。
    dtype:该参数可选参数,默认为None,如果不进行设置,生成的Tensor数据类型会拷贝data中传入的参数的数据类型,比如data中的数据类型为float,则默认会生成数据类型为torch.FloatTensor的Tensor。
    device:该参数可选参数,默认为None,如果不进行设置,会在当前的设备上为生成的Tensor分配内存。
    requires_grad:该参数为可选参数,默认为False,在为False的情况下,创建的Tensor不能进行梯度运算,改为True时,则可以计算梯度。
    pin_memory:该参数为可选参数,默认为False,如果设置为True,则在固定内存中分配当前Tensor,不过只适用于CPU中的Tensor。

    不同类型转换:
    image.png
    注意区分 torch.tensor 和 torch.Tensor:
    image.png
    image.png
    所以说 torch.Tensor 等价于 torch.FloatTensor

    二、张量维度

    不同类型的数据可以用不同维度(dimension)的张量来表示。
    标量为0维张量,向量为1维张量,矩阵为2维张量。
    彩色图像有rgb三个通道,可以表示为3维张量。
    视频还有时间维,可以表示为4维张量。
    可以简单地总结为:有几层中括号,就是多少维的张量。

    三、张量尺寸

    可以使用 shape属性或者 size()方法查看张量在每一维的长度.
    可以使用view方法改变张量的尺寸。
    如果view方法改变尺寸失败,可以使用reshape方法.
    image.png

    四、张量和numpy数组

    可以用numpy方法从Tensor得到numpy数组,也可以用torch.from_numpy从numpy数组得到Tensor。
    这两种方法关联的Tensor和numpy数组是共享数据内存的。
    如果改变其中一个,另外一个的值也会发生改变。
    如果有需要,可以用张量的clone方法拷贝张量,中断这种关联。
    此外,还可以使用item方法从标量张量得到对应的Python数值。
    使用tolist方法从张量得到对应的Python数值列表。
    tensor.add_(1) #给 tensor增加1,arr也随之改变 等价于: torch.add(tensor,1,out = tensor)

    #torch.from_numpy函数从numpy数组得到Tensor
    arr = np.zeros(3) # 1*3 然后元素都是0
    tensor = torch.from_numpy(arr)
    
    # numpy方法从Tensor得到numpy数组
    tensor = torch.zeros(3)
    arr = tensor.numpy()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    参考:https://github.com/lyhue1991/eat_pytorch_in_20_days

  • 相关阅读:
    实验1:SDN拓扑实践
    selenium下载安装 -- 使用谷歌驱动碰到的问题
    输出变量的机器数表示
    六、Zabbix — Proxy分布式监控
    设将n(n>1)个整数存放在一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移P(0<P<n)个位置
    html 铆钉跳转指定元素 元素id
    使用ffmpeg解码video模块,支持3种解码:cpu解码、amd64平台的cuda解码和NX平台的Nvmpi解码
    关于我用iVX沉浸式体验了一把0代码项目创建
    项目实战:设置静态资源放行
    JAVA基础(秋招总结)
  • 原文地址:https://blog.csdn.net/hxhabcd123/article/details/132863784