• 【深度学习】torch-张量Tensor


    torch-张量Tensor

    1. 张量Tensor

    • torch.tensor()
    # 创建一个标量(0维张量)
    scalar_tensor = torch.tensor(3.14)
    # 创建一个向量(1维张量)
    vector_tensor = torch.tensor([1, 2, 3])
    # 创建一个矩阵(2维张量)
    matrix_tensor = torch.tensor([[1, 2], [3, 4]])
    # 创建一个3维张量
    tensor_3d = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • torch.zeros()-全零张量
    zero_tensor = torch.zeros(3, 4)  # 3行4列的全零矩阵
    
    • 1
    • torch.ones()-全一张量
    ones_tensor = torch.ones(2, 3)  # 2行3列的全一矩阵
    
    • 1
    • torch.full()-常数填充张量
    constant_tensor = torch.full((2, 2), 7)  # 2行2列的常数填充矩阵,值为7
    
    • 1
    • torch.eye()-单位矩阵
    identity_matrix = torch.eye(3)  # 3阶单位矩阵
    
    • 1
    • torch.arange()-等差数列张量
    range_tensor = torch.arange(0, 10, 2)  # 从0开始,步长为2,直到小于10
    
    • 1
    • torch.rand()-随机张量
    rand_tensor = torch.rand(2, 3)  # 2行3列的均匀分布随机矩阵
    
    • 1
    • torch.randn()-正态分布随机张量
    randn_tensor = torch.randn(3, 3)  # 3行3列的正态分布随机矩阵
    
    • 1
    • size()-形状
    x = torch.rand(2, 3)
    print(x.size())  # 输出: torch.Size([2, 3])
    
    • 1
    • 2
    • dtype-数据类型指定及获取
    x = torch.rand(2, 3, dtype=torch.float)
    print(x.dtype)  # 输出: torch.float32
    
    • 1
    • 2
    • to()-GPU/CPU
    if torch.cuda.is_available():
        device = torch.device("cuda")          # GPU 设备
    else:
        device = torch.device("cpu")           # CPU 设备
    x = x.to(device)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • randn_like()、zeros_like()、ones_like()-已知张量创建形状类似的张量
    t = torch.randn(3,3)
    t1 = torch.randn_like(t)
    
    • 1
    • 2
    • 张量方法(它们有很多参数可选,要用再查):
    t = torch.rand(3, 4, 5)
    t.nelement()  # 返回数量
    t.size()  # 返回尺寸,元组
    t.shape  # 返回形状,元组
    t.size(2)  # 返回指定维度大小
    t.view(12, 5)    
    t.view(-1, 6).shape
    t.view(-1, 6).transpose(1, 0).shape
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 索引和切片

    张量的索引和切片和列表基本是一样的,有步长、起点、终点等。例如:

    t[0,0,2]   t[:,1,1]   t>0   t[t > 0]
    
    • 1
    • 张量运算
    # 加法运算
    add_res = x + y  
    # 减法运算  
    sub_res = x - y  
    # 乘法运算  
    mul_res = x * y  
    # 除法运算  
    div_res = x / y  
    
    # 加法运算
    add_res = torch.add(x, y)
    # 减法运算
    sub_res = torch.subtract(x, y)
    # 乘法运算
    mul_res = torch.mul(x, y)
    # 除法运算
    div_res = torch.div(x, y)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 转置:
    x = torch.randn(3, 4)
    y = x.transpose(0, 1)
    
    • 1
    • 2

    下面是对张量操作的总结,不含代码,要用再查:

    • 创建操作:用于构造张量的函数,如ones()和from_numpy()
    • 修改操作:用于直接修改张量
    • 索引、切片、连接、转换操作:用于改变张量的形状、步长或内容的函数
    • 数学操作:通过运算操作张量内容的函数:
      • 逐点操作:通过对每个元素分别应用一个函数来得到一个新的张量,如abs()、cos()
      • 归约操作:通过迭代张量来计算聚合值的函数,如mean()
      • 比较操作:在张量上计算数字谓词的函数
      • 频谱操作:在频域上进行变换和操作的函数
      • 其他操作:作用于向量的特定函数,或对矩阵进行操作的函数
      • BLAS和LAPACK操作:符合基本线性代数子程序规范的函数,用于标量、向量—向量、矩阵—向量、矩阵—矩阵操作
    • 随机采样:从概率分布中随机生成值的函数
    • 序列化:保存和加载张量的函数
    • 并行化:用于控制并行CPU执行的线程数的函数。

    与·numpy的互操作:

    # 从张量points得到一个numpy数组
    points_np = points.numpy()
    
    # 从numpy得到一个pytorch张量
    points = torch.from_numpy(points_np)
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    Go字符串实战操作大全!
    django特殊文件管理之Static和Media异同之处
    【leetcode 力扣刷题】字符串匹配之经典的KMP!!!
    微信小程序经纬度转化为具体位置(逆地址解析)
    Windows下Git Bash调用rsync
    CKA考生注意:这些Deployment要点能助你一臂之力!
    (四)Shell编程之算数运算
    SpringBoot 自定义线程池
    代码随想录笔记_动态规划_718最长重复子数组
    感统失调长大就好了?错,长大就晚了!
  • 原文地址:https://blog.csdn.net/likinguuu/article/details/134320738