• 【深度学习】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
  • 相关阅读:
    线程间等待与唤醒机制、单例模式、阻塞队列、定时器
    【C++】简单理解:将整数(浮点数)转换为字符串(string),将字符串(string)转换为整数(浮点数)方法
    详解SurfaceView和TextureView
    对象密封的四种方式 Object.is Object.assign
    基于JAVA汽车站车辆运管系统计算机毕业设计源码+数据库+lw文档+系统+部署
    蓝桥杯单片机学习 ③中断系统与应用
    p6spy代理MyBatis控制台打印完整SQL执行语句
    八皇后问题的Java实现
    论文阅读_用模型模拟记忆过程
    JS高级 之 eventBus 事件总线
  • 原文地址:https://blog.csdn.net/likinguuu/article/details/134320738