PyTorch基础(18)-- torch.stack()方法

一、方法详解

首先,看一下stack的直观解释,动词可以简单理解为:把……放成一堆、把……放成一摞。
在这里插入图片描述
有了对stack方法的直观感受,接下来,我们正式解析torch.stack方法。

PyTorch torch.stack() method joins (concatenates) a sequence of tensors (two or more tensors) along a new dimension. It inserts new dimension and concatenates the tensors along that dimension. This method joins the tensors with the same dimensions and shape. We could also use torch.cat() to join tensors But here we discuss the torch.stack() method.

torch.stack方法用于沿着一个新的维度 join(也可称为cat)一系列的张量(可以是2个张量或者是更多),它会插入一个新的维度,并让张量按照这个新的维度进行张量的cat操作。值得注意的是:张量序列中的张量必须要有相同的shape和dimension。

在这里插入图片描述

Parameters
tensors:张量序列,也就是要进行stack操作的对象,可以有很多个张量。
dim:按照dim的方式对这些张量进行stack操作,也就是你要按照哪种堆叠方式对张量进行堆叠。dim的取值范围为闭区间[0,输入Tensor的维数]
return
堆叠后的张量

只通过理论对方法进行解释说明是不够直观的,下面会通过大量的示例对torch.stack方法进行解析!

二、案例解析

2.1 案例1:2个一维tensor进行stack操作

  • 程序
 x = t.tensor([1,2,3,4])y = t.tensor([5,6,7,8])print(x.shape)print(y.shape)z1 = t.stack((x,y), dim=0)print(z1)print(z1.shape)z2 = t.stack((x,y), dim=1)print(z2)print(z2.shape)
  • 运行结果
torch.Size([4])
torch.Size([4])tensor([[1, 2, 3, 4],[5, 6, 7, 8]])
torch.Size([2, 4])tensor([[1, 5],[2, 6],[3, 7],[4, 8]])
torch.Size([4, 2])
  • 图解
    在这里插入图片描述

2.2 案例2:2个二维tensor进行stack操作

  • 程序
 x = t.tensor([[1,2,3],[4,5,6]])y = t.tensor([[7,8,9],[10,11,12]])print(x.shape)print(y.shape)z1 = t.stack((x,y), dim=0)print(z1)print(z1.shape)z2 = t.stack((x,y), dim=1)print(z2)print(z2.shape)z3 = t.stack((x,y), dim=2)print(z3)print(z3.shape)
  • 运行结果
torch.Size([2, 3])
torch.Size([2, 3])tensor([[[ 1,  2,  3],[ 4,  5,  6]],[[ 7,  8,  9],[10, 11, 12]]])
torch.Size([2, 2, 3])tensor([[[ 1,  2,  3],[ 7,  8,  9]],[[ 4,  5,  6],[10, 11, 12]]])
torch.Size([2, 2, 3])tensor([[[ 1,  7],[ 2,  8],[ 3,  9]],[[ 4, 10],[ 5, 11],[ 6, 12]]])
torch.Size([2, 3, 2])
  • 图解
    在这里插入图片描述

2.3 案例3:多个二维tensor进行stack操作

  • 程序
x = torch.tensor([[1,2,3],[4,5,6]])
y = torch.tensor([[7,8,9],[10,11,12]])
z = torch.tensor([[13,14,15],[16,17,18]])
print(x.shape)
print(y.shape)
print(z.shape)r1 = torch.stack((x,y,z),dim=0)
print(r1)
print(r1.shape)r2 = torch.stack((x,y,z),dim=1)
print(r2)
print(r2.shape)r3 = torch.stack((x,y,z),dim=2)
print(r3)
print(r3.shape)
  • 运行结果
torch.Size([2, 3])
torch.Size([2, 3])
torch.Size([2, 3])tensor([[[ 1,  2,  3],[ 4,  5,  6]],[[ 7,  8,  9],[10, 11, 12]],[[13, 14, 15],[16, 17, 18]]])
torch.Size([3, 2, 3])tensor([[[ 1,  2,  3],[ 7,  8,  9],[13, 14, 15]],[[ 4,  5,  6],[10, 11, 12],[16, 17, 18]]])
torch.Size([2, 3, 3])tensor([[[ 1,  7, 13],[ 2,  8, 14],[ 3,  9, 15]],[[ 4, 10, 16],[ 5, 11, 17],[ 6, 12, 18]]])
torch.Size([2, 3, 3])
  • 图解

2.4 案例4:2个三维tensor进行stack操作

  • 程序
x = torch.tensor([[[1,2,3],[4,5,6]],[[2,3,4],[5,6,7]]])
y = torch.tensor([[[7,8,9],[10,11,12]],[[8,9,10],[11,12,13]]])
print(x.shape)
print(y.shape)
z1 = torch.stack((x,y),dim=0)
print(z1)
print(z1.shape)
z2 = torch.stack((x,y),dim=1)
print(z2)
print(z2.shape)
z3 = torch.stack((x,y),dim=2)
print(z3)
print(z3.shape)
z4 = torch.stack((x,y),dim=3)
print(z4)
print(z4.shape)
  • 运行结果
torch.Size([2, 2, 3])
torch.Size([2, 2, 3])tensor([[[[ 1,  2,  3],[ 4,  5,  6]],[[ 2,  3,  4],[ 5,  6,  7]]],[[[ 7,  8,  9],[10, 11, 12]],[[ 8,  9, 10],[11, 12, 13]]]])
torch.Size([2, 2, 2, 3])tensor([[[[ 1,  2,  3],[ 4,  5,  6]],[[ 7,  8,  9],[10, 11, 12]]],[[[ 2,  3,  4],[ 5,  6,  7]],[[ 8,  9, 10],[11, 12, 13]]]])
torch.Size([2, 2, 2, 3])tensor([[[[ 1,  2,  3],[ 7,  8,  9]],[[ 4,  5,  6],[10, 11, 12]]],[[[ 2,  3,  4],[ 8,  9, 10]],[[ 5,  6,  7],[11, 12, 13]]]])
torch.Size([2, 2, 2, 3])tensor([[[[ 1,  7],[ 2,  8],[ 3,  9]],[[ 4, 10],[ 5, 11],[ 6, 12]]],[[[ 2,  8],[ 3,  9],[ 4, 10]],[[ 5, 11],[ 6, 12],[ 7, 13]]]])
torch.Size([2, 2, 3, 2])
  • 图解

参考文献

[1]https://blog.csdn.net/flyingluohaipeng/article/details/125034358
[2]https://www.geeksforgeeks.org/python-pytorch-stack-method/
[3]https://www.bing.com/search?q=torch.stack&form=ANNTH1&refig=653766bda2d540398dfb83d482cd33cd

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

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

相关文章

解决报错:gnutls_handshake() failed: The TLS connection was non-properly terminated.

执行git clone的时候,出现错误:gnutls_handshake() failed: The TLS connection was non-properly terminated. 如图: 解决方式: 两次重置代理:完美解决 git config --global --unset https.https://github.com.pro…

Pandas数据分析系列9-数据透视与行列转换

Pandas 数据透视表 当数据量较大时,为了更好的分析数据特征,通常会采用数据透视表。数据透视表是一种对数据进行汇总和分析的工具,通过重新排列和聚合原始数据,可以快速获得更全面的数据洞察。数据透视表在Excel中也是经常使用的一个强大功能,在Pandas模块,其提供了pivot…

派克斯电脑全局改IP如何辅助捉妖游戏

捉妖游戏是一款非常受欢迎的手机游戏,玩家需要通过探索地图来捉到各种可爱的妖精。为了让游戏更具趣味性,玩家可以通过地图制作来设计自己的捉妖之旅。在这篇教程中,我们将向您展示如何使用电脑全局软件工具——派克斯,来制作捉妖…

Day 2 Abp框架下,MySQL数据迁移时,添加表和字段注释

后端采用Abp框架,当前最新版本是7.4.0。 数据库使用MySQL,在执行数据库迁移时,写在Domain层的Entity类上的注释通通都没有,这样查看数据库字段的含义时,就需要对照代码来看,有些不方便。今天专门来解决这个…

优思学院|六西格玛证书怎么考?7个步骤助你马上取得

在当今竞争激烈的职场环境中,持有六西格玛证书可以为您的职业生涯增添亮点。 事实上,六西格玛认证的机构还是挺多,首先,是独立的认证组织授予的认证,例如比如美质协、国际精益六西格玛研究所(ILSSI&#x…

Angular-01:基本架构

各种学习后的知识点整理归纳,非原创! ① 概述 angular是一个使用HTML、CSS、TypeScript构建的客户端应用的框架,用来构建单页面应用程序。是一个重量级的框架,内部集成了大量开箱即用的功能模块。是为大型应用开发而设计&#xf…

百度Comate SaaS版本正式发布,助力开发者加速研发过程

百度Comate是基于文心大模型的智能代码助手,让开发者的编码更快、更好、更简单,为开发者自动生成完整的、且更符合实际研发场景的代码行或整个代码块,帮助每一位开发者轻松完成研发任务。10月17日召开的百度世界大会上,百度CTO王海…

uni-app小程序,uview-ui组件样式无法穿透修改的解决办法

1.首先设置以下选项.该选项的作用是让微信小程序允许样式穿透. 在需要改动的文件内加上 options: { styleIsolation: shared } 2.然后再使用vue的样式穿透写法. ::v-deep .类样式{} 或者 /deep/ .类样式{}

非父子组件通信-发布订阅模式

发布订阅模式其实与vue无关,完全是ES6的代码,但是它可以通过这种模式实现非父子组件的通信 store.js文件 首先创建一个store.js文件,用于提供发布与订阅方法 export default {datalist: [], //存放带一个参数的函数集合//订阅subscribe(fu…

使用非空断言解决Typescript报错:对象可能为 “null“

现象如下: 解决办法:在报错的属性后面加惊叹号!, 也就是非空断言 问题解决:

挑战没有免费的午餐定理?南洋理工提出扩散模型增强方法FreeU

论文名称:FreeU: Free Lunch in Diffusion U-Net 文章链接:https://arxiv.org/abs/2309.11497 代码仓库:https://github.com/ChenyangSi/FreeU 项目主页:https://chenyangsi.top/FreeU 机器学习领域中一个著名的基本原理就是“没…

MySQL - mvcc

mvcc 是什么? MVCC(多版本并发控制)是一种数据库并发控制机制,旨在提高数据库的并发性,避免锁定操作,从而减少等待和提高性能。MVCC 主要解决数据库读写操作之间的线程安全问题。 MVCC 主要有两种读取数据…

【web前端】web前端设计入门到实战第二弹——面试题总结+答案

这里写目录标题 一、选择题二、填空题 一、选择题 1、表格的主要作用是( B )。 A.网页排版布局 B.显示数据 C.处理图像 D.优化网站 2、如果表格的边框不显示,应设置border的值为( B )。 A.1 B.0 C.2 D.3 3、定义单元格…

RetentionPolicy枚举类

包名package java.lang.annotation 作用 注释保留策略。此枚举类型的常量描述用于保留注释的各种策略。它们被使用与{ Retention}元注释类型一起指定注释要保留多长时间。 属性 SOURCE编译器将丢弃注释。CLASS注释将由编译器记录在类文件…

threejs(3)-详解材质与纹理

一、Matcap(MeshMatcapMaterial)材质原理与应用 Matcap是一张含有光照信息的贴图,通常是直接截取材质球截图来使用。因此Matcap可以很好的模拟静止光源下的光照效果。 最直接的方式就是直接使用在View空间下的模型法向量的xy分量去采样Matcap。 另外还有一种常见…

EPPlus库的安装和使用 C# 中 Excel的导入和导出

安装 工具栏->NuGet 包管理器->管理解决方案的NuGet程序包 安装到当前项目中 使用 将 DataGridView 数据导出为Excel 首先,需要将数据DataGridView对象转换为DataTable private void btnExport_Click(object sender, EventArgs e) {// 1.将当前页面的data…

基于Raft解决“幽灵复现”问题

3.1 关于Raft日志恢复 首先,我们聊一下Raft的日志恢复,在 Raft 中,每次选举出来的Leader一定包含已经Committed的数据(抽屉原理,选举出来的Leader是多数中数据最新的,一定包含已经在多数节点上Commit的数据),新的Leader将会覆盖其他节点上不一致的数据。虽然新选举出来…

json-server工具准备后端接口服务环境

1.安装全局工具json-server(全局工具仅需要安装一次) 官网:json-server - npm 点击Getting started可以查看使用方法 在终端中输入yarn global add json-server或npm i json-server -g 如果输入json-server -v报错 再输入npm install -g j…

Elasticsearch之mapping

文章目录 以显式的方式创建一个映射查看某个具体索引的mapping定义向已存在的映射中添加一个新的属性查看映射中指定字段的定义信息更新已存在映射的某个字段 1、 官方文档地址 2、 字段类型 1、定义:映射是定义文档及其包含的字段如何存储和索引的过程。 2、每个…

电影评分数据分析案例-Spark SQL

# cording:utf8from pyspark.sql import SparkSession from pyspark.sql.types import IntegerType, StringType, StructType import pyspark.sql.functions as Fif __name__ __main__:# 0.构建执行环境入口对象SparkSessionspark SparkSession.builder.\appName(movie_demo)…