torch中的张量处理

torch.cat函数用法 torch.cat函数是PyTorch中用于拼接张量(tensors)的函数。它可以沿着指定的维度将多个张量连接在一起。 阅读详情

  这篇博文是持续更新博文,记录tensor各种操作的爱恨情仇。

  每天学一点,十天学十点,亿天学亿点!

目录

1.torch.stack

2.torch.cat

3.repeat_interleave

4.softmax与sum中指定维度dim的问题

5.sort

6.repeat

7.transpose

8.unsqueeze与squeeze


1.torch.stack

  stack命令表示输出的东西扩展成一个维度相加

K = torch.tensor([[[0.0, 1.0], [2.0, 3.0]], [[1.0, 2.0], [3.0, 4.0]]])
K.shape

'''
torch.Size([2, 2, 2])
'''

  将张量K与K+1(K中每个元素加1)和K+2连接起来,构成一个具有3个输出通道的卷积核,扩维。如果指定的维度维1,则尺寸维(2,3,2,2),所以这个指定的维度是进行叠加后扩展的维度数,使用stack叠加的东西总会扩维。

K = torch.stack((K, K + 1, K + 2), 0)
K.shape, K

'''
(torch.Size([3, 2, 2, 2]),
 tensor([[[[0., 1.],
           [2., 3.]],
 
          [[1., 2.],
           [3., 4.]]],
 
 
         [[[1., 2.],
           [3., 4.]],
 
          [[2., 3.],
           [4., 5.]]],
 
 
         [[[2., 3.],
           [4., 5.]],
 
          [[3., 4.],
           [5., 6.]]]]))
'''

2.torch.cat

不会扩维,会在原有的维度上指定拼接

X = torch.arange(16, dtype=torch.float32).reshape((1, 1, 4, 4))
X, X.shape

'''
(tensor([[[[ 0.,  1.,  2.,  3.],
           [ 4.,  5.,  6.,  7.],
           [ 8.,  9., 10., 11.],
           [12., 13., 14., 15.]]]]),
 torch.Size([1, 1, 4, 4]))
'''
X = torch.cat((X, X + 1), 1)
X, X.shape

'''
(tensor([[[[ 0.,  1.,  2.,  3.],
           [ 4.,  5.,  6.,  7.],
           [ 8.,  9., 10., 11.],
           [12., 13., 14., 15.]],
 
          [[ 1.,  2.,  3.,  4.],
           [ 5.,  6.,  7.,  8.],
           [ 9., 10., 11., 12.],
           [13., 14., 15., 16.]]]]),
 torch.Size([1, 2, 4, 4]))
​'''

注意:cat操作,注意只有除了指定的拼接维度之外,其他维度必须一致才能运行!

3.repeat_interleave

  repeat_interleave就是将原来的x_test中的每一个元素赋值n_train次,得到一个一维tensor,再使用reshape操作使复制的相同元素都在同一行中。

X_repeat = x_test.repeat_interleave(n_train).reshape((-1, n_train))

见下图:原x_text为:x_test = torch.arange(0, 5, 0.1)

4.softmax与sum中指定维度dim的问题

dim=1表示的是沿着列增的方向操作,本质是对每一行操作!!!

且sun(1)也表示沿着列增的方向操作,本质是对每一行的元素进行相加!!!

attention_weights = nn.functional.softmax(-(X_repeat - x_train)**2 / 2, dim=1)

5.sort

sort返回两个值,第一个是拍好了从小到大的顺序后的values,另一个是对应原数据的indices

6.repeat

  state的尺寸为(bs,h),X为(T,bs,emb)

context = state[-1].repeat(X.shape[0], 1, 1)

  改成(T,1),结果返回的是(T×bs,h);改成(T,1,1,1),返回的是(T,1,bs,h);改成(1,T,1),返回的(1,bs×T,h)。也就是说,原tensor为二维的(bs,h),repeat的最后两个数表示对这两个维度的操作,如果最后两个是(1,1),则原tensor保持不变,如果最后两个维度数字发生了变化,则表示原对应维度的数字×变化数字。如上述的(bs×T,h)或(bs, T×h)

 在这里,X表示tgt的input,形状为(T,bs,emb),广播后的state为(T,bs,h),拼接后为(T,bs,emb+h),对应decoder里面的GRU输入维度为dmb+h。

  cat操作只有除了指定的拼接维度之外,其他维度必须一致才能运行!

7.transpose

Numpy用于交换数组的维度。可指定维度。

scores = torch.bmm(queries, keys.transpose(1,2))

queries与keys两个tensor进行bmm矩阵乘法,对keys进行维度交换,从(bs,k-v,d)--(bs,d.k-v),这样bmm后得到的是(bs,q,k-v)。方便与后面的values的(bs,k-v,values)做bmm。

8.unsqueeze与squeeze

unsequeeze(i)再指定第i个维度上添加1维度;squeeze(i)减去原tensor中的第i维度,且第i维度必须是1才行,否则没用。

欣赏沐神加性注意力源码:forward部分

def forward(self, queries, keys, values, valid_lens):
        queries, keys = self.W_q(queries), self.W_k(keys)
        # 在维度扩展后,
        # queries的形状:(batch_size,查询的个数,1,num_hidden)
        # key的形状:(batch_size,1,“键-值”对的个数,num_hiddens)
        # 使⽤⼴播⽅式进⾏求和
        features = queries.unsqueeze(2) + keys.unsqueeze(1)
        features = torch.tanh(features)
        # self.w_v仅有⼀个输出,因此从形状中移除最后那个维度。
        # scores的形状:(batch_size,查询的个数,“键-值”对的个数)
        scores = self.w_v(features).squeeze(-1)
        self.attention_weights = masked_softmax(scores, valid_lens)
        # values的形状:(batch_size,“键-值”对的个数,值的维度)
        return torch.bmm(self.dropout(self.attention_weights), values)

对于query(bs,q,h)与key(bs,k-v,h),将两个扩充为(bs,q,1,h)与(bs,1,k-v,h),再通过广播相加,最后再激活,通过最后Linear变成(bs,q,k-v,1)。注意,最后维度为1,所以可以压缩掉最后的维度。

Pytorch中torch.cat()函数解析 一. torch.cat()函数解析 1. 函数说明 1.1 官网:torch.cat(),函数定义及参数说明如下图所示: 1.2 函数功能 函数将两个张量(tensor)按指定维度拼接在一起,注意:除拼接维数dim数值可不同外其余维数数值需相同,方能对齐,如下面例子所示。torch.cat()函数不会新增维度,而torch.stack()函数会新增一个维度,相同的是两个都是对张量进行拼接 2. 代码举例 2.1 输入两个二维张量(dim=0):dim=0对行进行拼接 a = torch.randn(2, 阅读详情

相关推荐

深入理解 PyTorch 中的 torch.cat 函数

PyTorch 是深度学习领域中广泛使用的框架之一,提供了丰富的工具和函数来处理张量。其中,torch.cat 函数是一个重要的工具,用于在给定维度上拼接张量的函数。也就是说它作用是将一组张量沿着指定的维度连接在一起。

AI_dataloads的博客 4308

torch.cat()函数的官方解释,详解以及例子

可以直接看3.例子,就明显1和2说的啥了 在pytorch中,常见的拼接函数主要是两个,分别是: stack() cat() 他们的区别参考这个链接区别,但是本文主要说cat()。 前言 该函数总的来说和python内置函数cat()函数没有区别。 1. cat()官方解释 ----torch.cat(inputs, dim=0) → Tensor 函数目的: 在给定维度上对输入的张量序列se...

xinjieyuan的博客 27万+

【Pytorch】torch.argmax 函数实战指南:从基础到多维张量处理

本文深入解析PyTorch中torch.argmax函数的核心用法与实战技巧。通过一维、二维及多维张量的生动示例,详细阐述了如何利用该函数寻找最大值索引,并重点讲解了dim参数与keepdim参数在图像分类、序列标注等深度学习任务中的关键应用,帮助开发者高效处理张量数据并避免常见误区。

weixin_29096377的博客 222

【PyTorch】repeat_interleave()方法详解

【PyTorch】repeat_interleave()方法详解 函数原型 torch.repeat_interleave(input, repeats, dim=None) → Tensor 方法详解 重复张量的元素 输入参数: input (类型:torch.Tensor):输入张量 repeats(类型:int或torch.Tensor):每个元素的重复次数。repeats参数会被广播来适应输入张量的维度 dim(类型:int)需要重复的维度。默认情况下,将把输入张量展平(flatten)为向量,

weixin_45261707的博客 4万+

PyTorch矩阵乘法全攻略:torch.matmul()的广播机制与多维张量处理

本文深入解析PyTorch中torch.matmul()函数的广播机制与多维张量处理技巧。作为矩阵乘法的瑞士军刀,该函数能智能处理从向量点积到批量高维数据运算,其内置的广播机制可自动调整张量维度,简化神经网络全连接层、注意力分数计算等核心组件的实现。掌握torch.matmul()是编写简洁、高效PyTorch代码的关键。

weixin_29095049的博客 341

PyTorch技巧揭秘:torch.unbind()如何高效处理多维张量切片

本文深入解析PyTorch中的torch.unbind()函数,揭示其如何高效处理多维张量切片。通过实际代码示例和应用场景,展示其在图像处理、批量数据处理和多任务学习中的强大功能,帮助开发者提升张量操作效率。

weixin_29084111的博客 113

torch_scatter和torch_sparse用于处理图形数据和稀疏张量·「含有下載地址」

在图神经网络中,图通常被表示为稀疏张量,其中每个非零元素表示图中的一条边或连接。torch_sparse提供了对这些稀疏张量执行常见操作的功能,例如转置、矩阵乘法等。这在图神经网络中是非常有用的,因为在每个节点处需要将邻居的信息聚合起来以进行下一步的计算。torch_scatter和torch_sparse是PyTorch的两个重要扩展库,用于处理图形数据和稀疏张量。这两个库的结合使得在PyTorch中更容易地处理图形数据和稀疏张量,为图神经网络的研究和应用提供了强大的工具。

源代码杀手的博客 752

【冰糖Python】PyTorch:张量维度扩充 维度压缩 torch.squeeze() torch.unsqueeze()

张量可以看做多维数组,有时需要对维度进行相关操作 比如,使用 PyTorch 对二维图像进行处理,需要扩展为四维的张量

冰糖的小屋 2880

深入解析PyTorch中torch.nonzero()的高级索引与多维张量处理技巧

本文深入解析PyTorch中torch.nonzero()函数的高级索引与多维张量处理技巧,涵盖基础语法、as_tuple参数的高级用法及多维张量实战案例。通过具体代码示例展示如何高效处理稀疏数据、图像分割和医学图像分析等场景,同时提供常见错误避坑指南,帮助开发者提升PyTorch应用能力。

white的博客 83

避坑指南:锐浪报表PictureBox打印图像常见的5大问题及解决方案

本文深入剖析了锐浪报表(Grid++Report)中PictureBox控件打印图像时常见的五大难题,包括图像源加载机制、拉伸失真、动态加载失败、跨平台兼容性及性能优化。文章提供了从原理理解到实战解决方案的完整指南,帮助开发者有效规避图像打印中的常见陷阱,确保报表输出的稳定与高质量。

water的专栏 1148

DDR内存Prefetch机制详解:从DDR1到DDR4的技术演进与性能提升

本文深入解析DDR内存Prefetch机制从DDR1到DDR4的技术演进与性能提升。通过分析Prefetch技术的实现原理与Burst传输的协同机制,揭示DDR1的2n Prefetch、DDR2的4n Prefetch、DDR3的8n Prefetch以及DDR4的Bank Group架构创新如何显著提升内存带宽与系统性能。

weixin_30369041的博客 537

PyTorch数据处理小技巧:用torch.nonzero快速定位张量里的非零值(附as_tuple参数详解)

本文深入解析PyTorch中torch.nonzero()的高效应用,特别是as_tuple参数在不同场景下的使用技巧。通过图像处理、文本分析等实战案例,展示如何快速定位张量中的非零值,并对比as_tuple参数对代码效率与可读性的影响,帮助开发者优化数据处理流程。

weixin_33693070的博客 408

数学建模国赛B题保姆级攻略:从选题到代码实现的完整流程(2024最新版)

本文提供2024年数学建模国赛B题的保姆级实战攻略,涵盖从赛题解构、模型构建到算法实现与论文撰写的完整流程。文章详细解析了如何快速抓住问题核心、建立数学模型、进行算法求解与结果可视化,并分享了高效团队协作与专业论文写作的关键技巧,助力参赛者系统性地完成从选题到代码实现的全过程。

weixin_29089057的博客 138

torch.cat()使用详解

官方文档 torch.cat(inputs, dimension=0) → Tensor 在给定维度上对输入的张量序列seq 进行连接操作。 torch.cat()可以看做 torch.split() 和 torch.chunk()的反操作。 参数: inputs (sequence of Tensors) – 可以是任意相同Tensor 类型的python 序列 dimension (int, optional) – 沿着此维连接张量序列。 cat() 函数可以通过下面例子更好的理解。 官方例子 &gt

我是天才很好 2万+

别再为数据发愁了!盘点5个公开可用的医学图像数据集(含MRI/CT/PET合成任务)

本文详细介绍了5个高质量的公开医学图像数据集,涵盖MRI、CT和PET三大模态,适用于深度学习模型训练和医学图像合成任务。每个数据集均提供下载指南、预处理技巧和PyTorch加载示例,帮助研究人员快速获取和处理数据,解决医学AI开发中的数据瓶颈问题。

weixin_30689307的博客 523

【深度学习新浪潮】什么是system 1和system 2?

System 1(快速生成)指大模型直接基于输入生成响应,无需显式中间推理步骤。例如,GPT-4等模型在默认状态下通过Transformer直接输出结果,擅长快速回答简单问题或生成连贯文本,但在复杂逻辑任务中可能出错。这类模型的内部计算以向量形式隐式进行,难以处理符号推理等需要离散决策的任务。System 2(慢速推理)指模型通过生成中间token(如思维链、分步推导)或多次调用LLM进行复杂推理。

专注:太空算力、AI infra、异构调度、大模型成本工程 924

Pytorch torch.cat对多个张量实行联接 torch.split实现对张量的分割

两个互反操作 torch.cat对多个张量实行联接 torch.split实现对张量的分割

Decennie的博客 629

【人工智能】AI 智能体驾驭工程(Harness Engineering)全解析

OpenAI将Harness定义为让Agent能完成有用工作的系统工程,Harness Engineering则是持续设计、实现、迭代这套系统的方法论;Anthropic将其概括为「让模型真正成为可靠Agent的基础设施」;Martin Fowler/Thoughtworks则将其定义为「控制Agent各层循环的规格、质量检查与工作流指导体系」。强大的AI模型是一匹爆发力极强的烈马;Prompt Engineering是「对马喊话的技巧」,Context Engineering是「给马看的地图」;

奶爸的编程之路,也就一周冷个三天 5239

Pytorch阅读文档之torch.cat ,torch.split() and torch.chunk(),torch.stack()函数

Pytorch阅读文档之torch.cat (),torch.split() and torch.chunk()函数 torch.cat ()函数 torch.cat(tensors, dim=0, out=None) → Tensor #在给定维度上连接给定序列张量的序列。 #所有张量必须具有相同的形状(在连接尺寸中除外)或为空。 #torch.cat()可以看作是torch.split()和t...

GhostintheCode的博客 3665

COMSOL介电弹性体数值仿真指南:预拉伸圆形DEA的稳态变形分析(I)

本期博客是《COMSOL介电弹性体数值仿真指南》系列博客中的一期。聚焦于介电弹性体驱动器(DEA)中最为经典的预拉伸圆形DEA驱动器构型,对其物理特性及数值仿真总体方案进行介绍与讨论。

忘了面孔的Batou 452

TBOX电源方案的详细讲解与分析

输入保护电路是确保车载电子系统稳定性的关键。通过合理选择TVS二极管、保险丝和浪涌抑制器等元器件,能够有效防止来自电源系统的瞬态过电压、浪涌和过流问题,保护后续电路免受损害。针对不同的电源环境和应用场景,可以通过提升功率、优化热管理以及选择高效元器件来进一步提高系统的保护能力和可靠性。

weixin_43199439的博客 1070

Pytorch基础操作 —— 7. 张量拼接操作

基础操作 —— 维度改变 然后就是涉及到基础操作的最后一部分, 维度的变换. 维度变化, 包含压缩, 扩展, 变形, 连接等操作. 这里列举一些常用的维度变化函数. 变形 tensor.view(…) 维度变化,也是torch中常用的操作。对于很多科学库来说,都有相应的维度改变函数,例如OpenCV中的reshape, torch里改变tensor维度的函数是view 其函数原型为: tensor.view(*shape) -> Tensor 需要注意的是, 改变后的张量元素数必须和改变前的

老程的技术笔记 4794

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【深度学习】特征融合的重要方法 | 张量的拼接 | torch.cat()函数 | torch.add(函数

【深度学习】特征融合的重要方法 | 张量的拼接 | torch.cat()函数 | torch.add(函数

weixin_46274756的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

torch.bmm() 与 torch.matmul()

torch.bmm() torch.matmul() torch.bmm()强制规定维度和大小相同 torch.matmul()没有强制规定维度和大小,可以用利用广播机制进行不同维度的相乘操作 当进行操作的两个tensor都是3D时,两者等同。 torch.bmm() 官网:https://pytorch.org/docs/stable/torch.html#torch.bmm t...

越努力 越幸运 4万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

torch.split() 与 torch.chunk()

torch.split() torch.chunk() 区别 两者都是切分tensor操作,有一些略微的不同。 torch.split() 官网:https://pytorch.org/docs/stable/torch.html#torch.split torch.split(tensor,ssplit_size_or_section,dim=0) torch.split...

越努力 越幸运 3万+
上一篇: d2l基础LeNet实现与ch6各类基础函数讲解
下一篇: d2l现代卷积神经网络(全部更新完成)
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值