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


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/18724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单线程 vs 多进程:Python网络爬虫效率对比

概述 在网络爬虫的开发过程中,性能优化是一个重要的考虑因素。本文将概述单线程和多进程在Python网络爬虫中的应用,并对比它们的效率。 单线程爬虫是最基本的爬虫模型,它按顺序一个接一个地处理任务。这种方法的优点是实现简单,易…

探索数据结构:顺序表的实现与应用

🔑🔑博客主页:阿客不是客 🍓🍓系列专栏:渐入佳境之数据结构与算法 欢迎来到泊舟小课堂 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 ​ 一、什么是顺序表 顺序表是用一段物理地址连续…

5分钟教你APP变现,让商业浪潮为你助力!

在这个数字时代,几乎每个人都有一个或多个应用程序(APP)的想法,它们可能是为了解决特定问题,提供娱乐或简化日常任务。然而,许多开发者面临的最大挑战之一是如何将这些创意转化为盈利的商业模式。本文将探讨…

sql server 2017 linux 高可用创建和故障转移

一,创建 图形界面 创建 在主副本上操作 选择Always On 高可用性,右键创建, 1.可用性组名称:test 集群类型:选择 none (EXTERNAL:可用性组托管在由外部群集技术(例如 Linux 上的…

从简单到复杂,红酒配餐的层次感与变化

红酒配餐是一种艺术,通过不同层次的搭配,可以呈现出丰富的味觉变化,使每一口都充满惊喜。云仓酒庄雷盛红酒以其卓着的品质和与众不同的口感,为红酒配餐提供了无限可能。从简单到复杂,红酒配餐的层次感与变化如下&#…

windows系统万能激活码可长期使用参考

windows万能激活码参考 windows10万能激活码可长时间使用,无需半年重新激活的哦。激活操作步骤 windows10万能激活码可长时间使用,无需半年重新激活的哦。 激活操作步骤 选择 ‘此电脑’ 中的 ‘属性’; 选择 ‘更改产品密钥’ 选项&#x…

数字经济讲师培训师教授唐兴通谈新质生产力数字化转型高质量发展AI人工智能大模型大数据经信委大数据管理局

什么是数字经济? 数字经济是指通过数字技术将个人、企业、设备、数据和运营连接起来而产生的经济活动。它涵盖了互联网、移动技术、大数据和信息通信技术等多个行业和技术之间的在线连接和交易。 数字经济不同于传统经济,因为它依赖数字技术、在线交易…

有类似注册表编辑器的vb6源码吗?vba注册表编辑器

第一步是要实现注册表功能的读写,所有数据类型,枚举列出所有子项 第二步,树形控件之类显示,可视化修改,查看 第三步,导入导出注册表 第四步,注册表监控,检测哪些注册表项是新建、删除…

Gopher的Rust第一课:第一个Rust程序

经过上一章[1]的学习,我想现在你已经成功安装好一个Rust开发环境了,是时候撸起袖子开始写Rust代码了! 程序员这个历史并不算悠久的行当,却有着一个历史悠久的传统,那就是每种编程语言都将一个名为“hello, world”的示…

MT3048 区间按位或

思路&#xff1a; 使用ST表。ST表求区间最大值改为按位或即可。 ST模板可参考MT3024 maxmin 代码&#xff1a; 1.暴力6/10 #include <bits/stdc.h> using namespace std; const int N 2e5 10; const int M 5e5 10; int n, m; int num[N]; int main() {cin >&…

java约定的System.getProperty

约定 specs.zoneid: 时区,格式{area}/{city} 例如 Asia/Shanghai; java.time.ZoneId可用的zoneId [Asia/Aden America/Cuiaba Etc/GMT+9 Etc/GMT+8 Africa/Nairobi America/Marigot Asia/Aqtau Pacific/Kwajalein America/El_Salvador Asia/Pontianak Africa/Cairo Pacific/P…

从 ASCII 到 UTF-8 - Unicode 码的诞生与实现

前言&#xff1a;最近我在整理过往笔记时&#xff0c;发现涉及到了 UTF-8、Unicode 的相关内容&#xff0c;相信大家中的很多人和之前的我一样&#xff0c;在过去的很长一段时间里&#xff0c;并没有搞清楚什么是 Unicode、什么是 UTF-8&#xff0c;于是就有了这篇文章&#xf…

腾讯面试:如何提升Kafka吞吐量?

面试题大全&#xff1a;www.javacn.site Kafka 是一个分布式流处理平台和消息系统&#xff0c;用于构建实时数据管道和流应用。它最初由 LinkedIn 开发&#xff0c;后来成为 Apache 软件基金会的顶级项目。 Kafka 特点是高吞吐量、分布式架构、支持持久化、集群水平扩展和消费组…

RK平台ADB不识别问题排查

简介 ADB是Android系统的调试工具&#xff0c;一般用USB线连接开发板和PC&#xff0c;可以抓取开发板的调试日志&#xff0c;执行shell指令&#xff0c;传输文件等功能。为了调试方便&#xff0c;RK平台的Linux系统也默认支持ADB&#xff0c;其源码是从Android移植过来的。 本…

「浏览器」跨站请求伪造CSRF攻击的原理以及防范措施

前言 HTTP 是一个无状态的协议&#xff0c;比如需要账号密码登录的网站这个场景&#xff0c;为了避免每次都需要重复输入&#xff0c;有一种方案就是Cookie&#xff0c;具体使用不做赘述&#xff0c;但是这样带来了一些安全问题。跨站请求伪造&#xff08;CSRF&#xff09;攻击…

Java日志体系概述

一. 日志体系分类 1.1 功能分类 1.2 jar包分类 二. 以log4j2为例 2.1 slf4j-api的初始化动态绑定过程 一. 日志体系分类 1.1 功能分类 门面类 slf4j&#xff1a;Simple Logging Facade for Java&#xff0c;为java提供的简单日志Facade具体实现类 logbacklog4j1log4j2jul&…

Windows下切换不同版本的CUDA

在环境变量处将需要使用的CUDA版本的如图所框选的环境变量移到其他版本环境变量的前方即可 PS&#xff1a;改环境变量后重启命令行再查看版本~

Three.js是基于原生WebGL封装的三维引擎

Three.js: 基于原生WebGL封装的三维引擎 引言 随着互联网技术的发展&#xff0c;Web前端技术不断进步&#xff0c;用户对于网页交互体验的要求也越来越高。艾斯视觉前端开发&#xff1a;三维技术作为提升用户体验的重要手段之一&#xff0c;正在逐渐成为前端开发中的热门技术…

pdf只要其中一页 pdf只要第一页怎么办 pdf只要前几页怎么弄

在现代办公环境中&#xff0c;PDF文件已经成为我们日常工作中不可或缺的一部分。然而&#xff0c;有时我们可能只需要PDF文件中的某一页&#xff0c;而不是整个文件。这时&#xff0c;我们该如何操作才能只获取所需的那一页呢&#xff1f;本文将详细操作方法&#xff0c;帮助大…

Spark中的累加器与广播变量及blockmanager图解

一、累加器 1、累加器的引入 案例&#xff1a;没读取一条文件中的数据&#xff0c;count1&#xff0c;并打印在Drive端&#xff08;控制台&#xff09; import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.rdd.RDDobject Demo20Accumulator {def ma…