Pytorch API

  1. torch.squeeze(input, dim=None)

    将给定的 input 这个 tensor 中,大小为 1 的 dim 全部压缩。

    如下例子:

    py 复制代码
    import torch
    t = torch.tensor([[1], [2], [3]])
    print(t) # tensor([[1], [2], [3]]) shape=(3,1)
    
    t = torch.squeeze(t)
    print(t) # tensor([1, 2, 3]) shape=(3,)
  2. torch.unsqueeze(input, dim)

    将给定的 input 这个 tensor 中,指定的 dim 扩充一维

    如下例子:

    py 复制代码
    import torch
    t = torch.tensor([1, 2, 3])
    print(torch.unsqueeze(t, 0)) # tensor([[1, 2, 3]]) shape=(1,3)
    
    print(torch.unsqueeze(t, 1)) # tensor([[1], [2], [3]]) shape=(3,1)
  3. torch.index_select(input, dim, index, *, out=None)

    在给定的 input 这个 tensor 中,选择维度 dim ,然后在这个维度中选择索引 index 的部分返回。

    如下例子:

    py 复制代码
    import torch
    
    t = torch.arange(1, 13).view(3, 4)
    	
    print(t)
    """
    tensor([[ 1,  2,  3,  4],
            [ 5,  6,  7,  8],
            [ 9, 10, 11, 12]])
    shape=(3, 4)
    """
    
    indices = torch.tensor([0, 2])
    
    print(torch.index_select(t, 0, indices))
    """
    tensor([[ 1,  2,  3,  4],
            [ 9, 10, 11, 12]])
    选择 dim=0 ,有 (0, 1, 2) 三个,选择第 0 行和第 2 行
    """
    
    print(torch.index_select(t, 1, indices))
    """
    tensor([[ 1,  3],
            [ 5,  7],
            [ 9, 11]])
    选择 dim=1 ,有 (0, 1, 2, 3) 四个,选择第 0 列和第 4 列
    """
  4. torch.norm(input, p='fro', dim=None, keepdim=False, out=None, dtype=None)

    将给定的 input 这个 tensor 按照给定的 dim 计算范数,具体计算的是什么范数由 p 决定

    p=1 表示第一范数,即 tensor 中每个元素绝对值之和

    p=2 表示第二范数,即 tensor 中每个元素平方和的和,再开根号

    其他表示无穷范数,即 tensor 中绝对值最大的元素

    py 复制代码
    import torch
    """
    	inputs.shape = (3, 3, 4)
    """
    inputs = torch.tensor([[[ 1.,  2.,  3.,  4.],
                           [ 2.,  4.,  6.,  8.],
                           [ 3.,  6.,  9., 12.]],
                           [[ 1.,  2.,  3.,  4.],
                           [ 2.,  4.,  6.,  8.],
                           [ 3.,  6.,  9., 12.]],
                           [[ 1.,  2.,  3.,  4.],
                           [ 2.,  4.,  6.,  8.],
                           [ 3.,  6.,  9., 12.]]])
     
    """
    inputs1.shape = (1, 3, 4)
    对于 dim=0 进行 L2 范数的计算,就是考虑将 (i, j, k) 其中所有的 i 的元素平方和加起来再开根号
    这里 sqrt((0, 0, 0)^2 + (1, 0, 0)^2 + (2, 0, 0)^2) = sqrt(3) = 1.7321
    tensor([[[ 1.7321,  3.4641,  5.1962,  6.9282],
             [ 3.4641,  6.9282, 10.3923, 13.8564],
             [ 5.1962, 10.3923, 15.5885, 20.7846]]])
    """
    inputs1 = torch.norm(inputs, p=2, dim=0, keepdim=True)
    print(inputs1)
    
    """
    inputs2.shape = (3, 1, 4)
    对于 dim=1 进行 L2 范数的计算,就是考虑将 (i, j, k) 其中所有的 j 的元素平方和加起来再开根号
    这里 sqrt((0, 0, 0)^2 + (0, 1, 0)^2 + (0, 2, 0)^2) = sqrt(1+4+9) = 3.7417
    tensor([[[ 3.7417,  7.4833, 11.2250, 14.9666]],
            [[ 3.7417,  7.4833, 11.2250, 14.9666]],
            [[ 3.7417,  7.4833, 11.2250, 14.9666]]])
    """
    inputs2 = torch.norm(inputs, p=2, dim=1, keepdim=True)
    print(inputs2)
    
    """
    inputs3.shape = (3, 3, 1)
    对于 dim=2 进行 L2 范数的计算,就是考虑将 (i, j, k) 其中所有的 k 的元素平方和加起来再开根号
    这里 sqrt((0, 0, 0)^2+(0, 0, 1)^2+(0, 0, 2)^2+(0, 0, 3)^2) = sqrt(1+4+9+16) = 5.4772
    tensor([[[ 5.4772],
             [10.9545],
             [16.4317]],
    
            [[ 5.4772],
             [10.9545],
             [16.4317]],
    
            [[ 5.4772],
             [10.9545],
             [16.4317]]])
    """
    inputs3 = torch.norm(inputs, p=2, dim=2, keepdim=True)
    print(inputs3)
  5. torch.chunk(input, chunks, dim=0) → List of Tensors

    input 这个 tensor 分成 chunks 个 tensors ,按照 dim 来划分。

    py 复制代码
    import torch
    
    t = torch.arange(1, 28).view(3, 3, 3)
    
    """
    tensor([[[ 1,  2,  3],
             [ 4,  5,  6],
             [ 7,  8,  9]],
    
            [[10, 11, 12],
             [13, 14, 15],
             [16, 17, 18]],
    
            [[19, 20, 21],
             [22, 23, 24],
             [25, 26, 27]]])
    shape = (3, 3, 3)
    """
    print(t)
    
    """
    按照 dim=0 划分,那么划分结果为
    (tensor([[[1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]]]), 
     tensor([[[10, 11, 12],
             [13, 14, 15],
             [16, 17, 18]]]), 
     tensor([[[19, 20, 21],
             [22, 23, 24],
             [25, 26, 27]]]))
    """
    print(torch.chunk(t, chunks=3, dim=0))
    
    """
    按照 dim=1 划分,那么划分结果为
    (tensor([[[ 1,  2,  3]],
             [[10, 11, 12]],
             [[19, 20, 21]]]), 
    
     tensor([[[ 4,  5,  6]],
             [[13, 14, 15]],
             [[22, 23, 24]]]), 
             
     tensor([[[ 7,  8,  9]],
             [[16, 17, 18]],
             [[25, 26, 27]]]))
    """
    print(torch.chunk(t, chunks=3, dim=1))
    
    """
    按照 dim=2 划分,那么划分结果为
    (tensor([[[ 1],
             [ 4],
             [ 7]],
    
            [[10],
             [13],
             [16]],
    
            [[19],
             [22],
             [25]]]), 
    tensor([[[ 2],
             [ 5],
             [ 8]],
    
            [[11],
             [14],
             [17]],
    
            [[20],
             [23],
             [26]]]), 
    tensor([[[ 3],
             [ 6],
             [ 9]],
    
            [[12],
             [15],
             [18]],
    
            [[21],
             [24],
             [27]]]))
    """
    print(torch.chunk(t, chunks=3, dim=2))
相关推荐
大飞记Python11 分钟前
AI大模型Token计费全解析:输入/输出、缓存命中、阶梯计价一文看懂
人工智能·缓存
Dave12054612 分钟前
Day17:Agent Memory高级设计——短期记忆、长期记忆与向量语义记忆
人工智能·学习
40岁资深老架构师尼恩13 分钟前
工业级 AI问数 AST语法 + 知识图谱语义+ 质量规则 三层安全校验 架构设计与实现
人工智能·安全·知识图谱
武子康19 分钟前
旧对话为什么没有恢复代码:Pi Session Tree 与上下文投影
人工智能
武子康20 分钟前
DeepSeek 把 Agent Core 也插件化了:Harness 的真正赌注
人工智能·llm·agent
wu_jing_sheng029 分钟前
哨兵卫星数据下载工具:基于CDSE的PySide6桌面应用开发实践
人工智能
小唔w30 分钟前
2026年AI培训行业观察:主流学习渠道一览
人工智能·学习
美狐美颜sdk33 分钟前
直播APP开发技术架构解析:从音视频流到第三方美颜SDK接入的完整方案
大数据·人工智能·音视频·美颜sdk·美颜api
CIO_Alliance41 分钟前
AI认知系列(3)| 数据、算法、算力、场景四要素协同
人工智能·算法·ipaas·系统集成·企业cio联盟·企业级ai化转型
技术传感器1 小时前
让 Hermes 自动完成一个软件需求:从 Issue 到 PR 的 AI 开发流水线
人工智能·架构·aigc·需求分析·issue