【无标题】PyTorch 常用算子说明

2024-05-29 10:52

本文主要是介绍【无标题】PyTorch 常用算子说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.增加维度

        print(a.unsqueeze(0).shape)  # 在0号维度位置插入一个维度

        print(a.unsqueeze(-1).shape)  # 在最后插入一个维度

        print(a.unsqueeze(3).shape)  # 在3号维度位置插入一个维度

2.删减维度

        a = torch.Tensor(1, 4, 1, 9)

        print(a.squeeze().shape) # 能删除的都删除掉

        print(a.squeeze(0).shape) # 尝试删除0号维度,ok

3.维度扩展(expand)

        b = torch.rand(32)

        f = torch.rand(4, 32, 14, 14)

        # 先进行维度增加

        b = b.unsqueeze(1).unsqueeze(2).unsqueeze(0)

        print(b.shape)

        # 再进行维度扩展

        b = b.expand(4, -1, 14, 14)  # -1表示这个维度保持不变,这里写32也可以

        print(b.shape)                  

         输出:

         torch.Size([1, 32, 1, 1])

        torch.Size([4, 32, 14, 14])

4.维度重复(repeat)

        print(b.shape)

        # 维度重复,32这里不想进行重复,所以就相当于"重复至1次"

        b = b.repeat(4, 1, 14, 14)

        print(b.shape)

        输出:

        torch.Size([1, 32, 1, 1])

        torch.Size([4, 32, 14, 14])

5.转置

        只适用于dim=2的Tensor。

        c = torch.Tensor(2, 4)

        print(c.t().shape)

        输出:

        torch.Size([4, 2])

  6. 维度交换

       d = torch.Tensor(6, 3, 1, 2)

        print(d.transpose(1, 3).contiguous().shape)  # 1号维度和3号维度交换

        输出:

        torch.Size([6, 2, 1, 3])

  7. permute

        h = torch.rand(4, 3, 6, 7)

        print(h.permute(0, 2, 3, 1).shape)

        输出:

        torch.Size([4, 6, 7, 3])

  8.gather

        1)input:输入

        2)dim:维度,常用的为0和1

        3)index:索引位置

        a=t.arange(0,16).view(4,4)

        print(a)

        index_1=t.LongTensor([[3,2,1,0]])

        b=a.gather(0,index_1)

        print(b)

        index_2=t.LongTensor([[0,1,2,3]]).t()#tensor转置操作:(a)T=a.t()

        c=a.gather(1,index_2)

        print(c)

        outout输出:

        tensor([[ 0,  1,  2,  3],

                         [ 4,  5,  6,  7],

                [ 8,  9, 10, 11],

                [12, 13, 14, 15]])

                tensor([[12,  9,  6,  3]])

        tensor([[ 0],

                   [ 5],

                  [10],

                  [15]])

        在gather中,我们是通过index对input进行索引把对应的数据提取出来的,而dim决定了索引的方式。

9.Chunk

             torch.chunk(tensor, chunks, dim=0)

              在给定维度(轴)上将输入张量进行分块儿

             直接用上面的数据来举个例子:

             l, m, n = x.chunk(3, 0) # 在 0 维上拆分成 3 份

             l.size(), m.size(), n.size()

              (torch.Size([1, 10, 6]), torch.Size([1, 10, 6]), torch.Size([1, 10, 6]))

                u, v = x.chunk(2, 0) # 在 0 维上拆分成 2 份

                u.size(), v.size()

        (torch.Size([2, 10, 6]), torch.Size([1, 10, 6]))

10.Stack

              合并新增(stack)

              stack需要保证两个Tensor的shape是一致的。

                c = torch.rand(4, 3, 32, 32)

                d = torch.rand(4, 3, 32, 32)

                print(torch.stack([c, d], dim=2).shape)

                print(torch.stack([c, d], dim=0).shape)

        运行结果:

                torch.Size([4, 3, 2, 32, 32])

                torch.Size([2, 4, 3, 32, 32])

11.View

        Pytorch中的view函数主要用于Tensor维度的重构,即返回一个有相同数据但不同维度的Tensor。

a3 = torch.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])
a4 = a3.view(4, -1)
a5 = a3.view(2, 3, -1)

输出:

#a3

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])

#a4

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]])

#a5
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]]])

12.reshape

        返回与 input张量数据大小一样、给定 shape的张量。如果可能,返回的是input 张量的视图,否则返回的是其拷贝。

a1 = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
a2 = torch.reshape(a1, (3, 4))
print(a1.shape)
print(a1)
print(a2.shape)
print(a2)

运行结果:

torch.Size([12])
tensor([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])
torch.Size([3, 4])
tensor([[ 1,  2,  3,  4],
        [ 5,  6,  7,  8],
        [ 9, 10, 11, 12]])

同view函数,也可以自动推断维度:a4 = torch.reshape(a1, (-1, 6))


 

这篇关于【无标题】PyTorch 常用算子说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1013470

相关文章

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

golang中reflect包的常用方法

《golang中reflect包的常用方法》Go反射reflect包提供类型和值方法,用于获取类型信息、访问字段、调用方法等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录reflect包方法总结类型 (Type) 方法值 (Value) 方法reflect包方法总结

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

Maven中的profiles使用及说明

《Maven中的profiles使用及说明》:本文主要介绍Maven中的profiles使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录主要用途定义 Profiles示例:多环境配置激活 Profiles示例:资源过滤示例:依赖管理总结Maven 中的