【无标题】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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

019、JOptionPane类的常用静态方法详解

目录 JOptionPane类的常用静态方法详解 1. showInputDialog()方法 1.1基本用法 1.2带有默认值的输入框 1.3带有选项的输入对话框 1.4自定义图标的输入对话框 2. showConfirmDialog()方法 2.1基本用法 2.2自定义按钮和图标 2.3带有自定义组件的确认对话框 3. showMessageDialog()方法 3.1

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

工作常用指令与快捷键

Git提交代码 git fetch  git add .  git commit -m “desc”  git pull  git push Git查看当前分支 git symbolic-ref --short -q HEAD Git创建新的分支并切换 git checkout -b XXXXXXXXXXXXXX git push origin XXXXXXXXXXXXXX