pytorch:张量

[[pytorch]]

基础知识

导入

首先,我们导入torch

请注意,虽然它被称为PyTorch,但是代码中使用torch而不是pytorch

import torch

定义

张量表示一个由数值组成的数组,这个数组可能有多个维度

  • 具有一个轴的张量:向量(vector)
  • 具有两个轴的张量:矩阵(matrix)
  • 具有两个轴以上的张量没有特殊的数学名称

初始化声明

torch提供的接口

使用 arange 创建
  •   - x = torch.arange(12)
    
      - x
    
      - Copy to clipboard
    
      - tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
    
    • 这个行向量包含以0开始的前12个整数,它们默认创建为整数

    • 也可指定创建类型为浮点数

    • 张量中的每个值都称为张量的 元素(element)

      • 例如,张量 x 中有 12 个元素
    • 除非额外指定,新的张量将存储在内存中,并采用基于CPU的计算

全1/全0初始化张量
    • 全0

        - torch.zeros((2, 3, 4))
      
        - __________________
      
        - tensor([[[0., 0., 0., 0.],
      
        -          [0., 0., 0., 0.],
      
        -          [0., 0., 0., 0.]],
      
        -         [[0., 0., 0., 0.],
      
        -          [0., 0., 0., 0.],
      
        -          [0., 0., 0., 0.]]])
      
    • 全1

        - torch.ones((2, 3, 4))
      
        - __________________
      
        - tensor([[[1., 1., 1., 1.],
      
        -          [1., 1., 1., 1.],
      
        -          [1., 1., 1., 1.]],
      
        -         [[1., 1., 1., 1.],
      
        -          [1., 1., 1., 1.],
      
        -          [1., 1., 1., 1.]]])
      
随机/概率分布 初始化张量
    • 创建一个形状为(3,4)的张量,其中的每个元素都从均值为0、标准差为1的标准高斯分布(正态分布)中随机采样

       - >>>>>>>>>>>>>>>>>
      
       - torch.randn(3, 4)
      
       - ______________________
      
       - tensor([[-0.0135,  0.0665,  0.0912,  0.3212],
      
       -         [ 1.4653,  0.1843, -1.6995, -0.3036],
      
       -         [ 1.7646,  1.0450,  0.2457, -0.7732]])
      
使用包含数值的Python列表(或嵌套列表),来为所需张量中的每个元素赋予确定值
  • 在这里,最外层的列表对应于轴0,内层的列表对应于轴1

    • torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])


    • tensor([[2, 1, 4, 3],

    •     [1, 2, 3, 4],
      
    •     [4, 3, 2, 1]])
      

属性

通过张量的shape属性来访问张量沿每个轴的长度
- x.shape
如果只想知道,即形状的所有元素乘积,可以检查它的大小(size)
  • 因为这里在处理的是一个向量,所以它的shape与它的size相同
通过张量的numel()属性来访问张量中元素的总数
- x.numel()

变换

调用reshape函数改变一个张量的形状而不改变元素数量和元素值
    • 例如,可以把张量x从形状为(12,)的行向量转换为形状为(3,4)的矩阵

    • 这个新的张量包含与转换前相同的值,但是它被看成一个3行4列的矩阵

    • 要重点说明一下,虽然张量的形状发生了改变,但其元素值并没有变

    • 注意,通过改变张量的形状,张量的大小不会改变

    • X = x.reshape(3, 4)

    • X

    • Copy to clipboard

    • 我们不需要通过手动指定每个维度来改变形状

      • 幸运的是,我们可以通过-1来调用此自动计算出维度的功能

      • 即我们可以用x.reshape(-1,4)或x.reshape(3,-1)来取代 x.reshape(3,4)

我的思考

tenser加法存在的问题

![[tenser加法存在的问题]]


Reference