面试-Torch函数
0. 连续张量和非连续张量1.核心含义“连续contiguous” 描述的是张量底层数据在内存中的存储方式。2.连续张量张量的元素在内存中按“行优先”顺序连续排列没有间隔能通过固定步长遍历所有元素3.非连续张量经过transpose()、permute()等操作后张量的维度顺序变了但底层数据的存储顺序没改导致元素在内存中不再连续遍历需要不规则步长。用 “书” 举例连续张量书按[0,0]→[0,1]→[0,2]→[1,0]→[1,1]→[1,2]的顺序摆放在一排没有空隙非连续张量如转置后维度变成[列,行]但书的摆放顺序还是原来的[0,0]→[0,1]→[0,2]→[1,0]→[1,1]→[1,2]此时要按列取数如[0,0]→[1,0]→[0,1]→[1,1]需要跳着找书内存不连续。1. torch.view()核心作用重塑张量形状采用方式是 “共享内存”修改新张量会影响原张量的位置要求张量是 “连续的contiguous”否则会报错。特点不改变原始 x 通过共享内存的方式改变张量的形状并且仅支持连续张量。因为view()需要按固定步长重塑维度。进一步解读PyTorch 中像view()这类操作并不会复制张量的底层数据而是创建一个新的 “视图view” —— 新张量和原张量共用同一块内存空间只是对数据的 “解读方式”维度、步长不同。因此修改新张量的某个元素原张量对应位置的元素也会同步改变反之亦然。importtorch# 原始张量xtorch.randn(2,3)print(原始x shape:,x.shape)# ([2,6])# 重塑x_viewx.view(2,3,3)print(重塑x shape:,x_view.shape)# ([2,3,3])# 验证共享内存x_view[0,0,0]100.0print(原始x[0,0]:,x[0,0])# tensor(100.)2. torch.reshape()核心作用重塑张量形状无需张量连续是更推荐的通用重塑方法。特点reshape兼容非连续张量view仅支持连续张量功能上几乎等价新手优先用reshape。importtorch# 原始张量xtorch.arange(12).reshape(3,4)# torch.Size([3,4])print(x shape:,x.shape)# 重塑为[4,3]x_transx.transpose(0,1)# 连续张量-非连续张量x_reshapex_trans.reshape(4,3)# [3,4] - [4,3]print(x_reshape:,x_reshape.shape)# 展平x_flatx_reshape.reshape(-1)# -1 表示自动计算维度print(x_flat shape:,x_flat.shape)3. torch.triu()核心作用提取张量的上三角部分其余元素置 0常用来构造因果掩码如 Transformer 的自注意力。特点提取张量的上三角部分。其中diagonal对角线偏移默认 0diagonal1表示主对角线以上的部分。importtorch# 原始矩阵torch.ones(x,y) 创建xtorch.ones(3,3)# 提取上三角部分diagonal1主对角线以上保留x_triutorch.triu(x,diagonal1)print(x_triu:,x_triu)# 输出# tensor([[0., 1., 1.],# [0., 0., 1.],# [0., 0., 0.]])# 构造因果掩码矩阵seq_len3masktorch.triu(torch.full(seqlen,seqlen),float(-inf),diagonal1)print(mask:,mask)# 输出# tensor([[-inf, -inf, -inf],# [ -inf, -inf, -inf],# [ -inf, -inf, -inf]])4. torch.full()核心作用创建指定形状、所有元素均为固定值的张量常用于构造掩码如负无穷、0/1 掩码。特点必须得传入默认值。参数size张量形状、fill_value填充值、device可选指定设备。比 torch.ones(x,y) 和 torch.zeros(x,y) 要更灵活。importtorch# 创建2x3的全5张量 torch.full((seq, seq), float(-inf))x_fulltorch.full((2,3),5.0)print(x_full:\n,x_full)# 输出# tensor([[5., 5., 5.],# [5., 5., 5.]])# 创建3x3的全负无穷张量注意力掩码常用masktorch.full((3,3),float(-inf),devicecpu)print(mask:\n,mask)# 输出# tensor([[-inf, -inf, -inf],# [-inf, -inf, -inf],# [-inf, -inf, -inf]])5. torch.transpose()核心作用交换张量的两个维度常用于矩阵转置、调整注意力张量的维度顺序如[bsz, seq_len, heads]→[bsz, heads, seq_len]。参数dim0、dim1要交换的两个维度索引。importtorch# 通过 torch.randn()、torch.full()、torch.ones()创建张量xtorch.randn(1,512,16,1024)xtorch.full((1,512,16,1024),float(-inf))xtorch.full((1,512,16,1024))# 报错torch.full(tensor, value)必须得同时传入默认值、张量两个元素xtorch.ones(1,512,16,1024)print(x:,x)# torch.Size([bsz, seq, heads, dim])6. torch.cat()核心作用在指定维度上拼接多个张量要求除拼接维度外其他维度形状完全一致。参数tensors待拼接的张量列表、dim拼接维度。importtorch# 通过 torch.randn()、torch.full()、torch.ones()创建张量xtorch.randn(1,512,16,1024)xtorch.full((1,512,16,1024),float(-inf))xtorch.full((1,512,16,1024))# 报错torch.full(tensor, value)必须得同时传入默认值、张量两个元素xtorch.ones(1,512,16,1024)print(x:,x)# [bsz, seq, heads, dim]x2torch.randn(1,512,8,1024)# 在维度2上进行拼接x_cattorch.cat([x1,x2],dim2)print(x_cat shape:,x_cat.shape)# torch.Size([1,512,24,1024])# 注意力 KV 缓存拼接past_kvtorch.randn(1,10,1024)# [bsz, seq, dim]这里seq代表已经处理了 10 个kv健cur_kvtorch.randn(1,1,1024)# 当前 kv 键值对new_kvtorch.cat([past_kv,new_kv],dim1)print(new_kv cache:,new_kv)# torch.cat([a, b], dimc)torch.Size([1, 11, 1024])7. torch.arange()核心作用创建连续整数序列的一维张量常用于生成索引、位置编码等。特点torch.arange() 是根据步长来生成张量的没有默认值只能生成一维张量torch.full() 能生成任意维度张量且支持默认值torch.randn() 随机生成指定维度的张量不支持默认值。参数start起始值默认 0、end结束值不包含、step步长默认 1。# 生成0到9的整数[0,1,2,...,9]x1torch.arange(10)print(x1:,x1)# tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])# 生成1到9步长2[1,3,5,7,9]x2torch.arange(1,10,2)print(x2:,x2)# tensor([1, 3, 5, 7, 9])# 结合size()使用生成与张量某维度长度匹配的索引xtorch.randn(2,5,8)# 生成0到x.size(1)-1的索引x.size(1)5idxtorch.arange(x.size(1))print(idx:,idx)# tensor([0, 1, 2, 3, 4])8. tensor.size() / tensor.shape核心作用获取张量的形状信息size()是方法shape是属性功能几乎等价。参数dim可选指定维度索引返回该维度的长度不指定则返回 torch.Size 对象。如 x.size(0) 代表张量中第一个维度的大小。xtorch.randn(2,3,4)# 获取整体形状print(x.size():,x.size())# torch.Size([2, 3, 4])print(x.shape:,x.shape)# torch.Size([2, 3, 4])# 获取指定维度的长度print(维度0长度:,x.size(0))# 2批次大小print(维度1长度:,x.size(1))# 3序列长度print(维度2长度:,x.size(2))# 4特征维度# 解包形状常用操作bsz,seq_len,hidden_dimx.size()print(f批次{bsz}, 序列长度{seq_len}, 特征维度{hidden_dim})# 批次2, 序列长度3, 特征维度49. torch.unsqueeze() / torch.squeeze()核心作用插入和删除指定维度插入和删除的维度的长度为1.torch.unsqueeze(tensor, dim)在指定维度插入一个维度维度长度为 1常用于扩展掩码维度torch.squeeze(tensor, dim)删除长度为 1 的维度简化张量形状。# unsqueeze扩展维度注意力掩码常用masktorch.randn(2,3)# torch.Size([2,3])# 插入维度1和2shape [2,1,1,3]匹配注意力分数维度mask_unsqmask.unsqueeze(1).unsqueeze(2)print(mask_unsq shape:,mask_unsq.shape)# torch.Size([2, 1, 1, 3])# squeeze删除长度为1的维度xtorch.randn(2,1,3,1)x_sqx.squeeze()# 删除所有长度为1的维度print(x_sq shape:,x_sq.shape)# torch.Size([2, 3])总结形状调整reshape通用、view共享内存是核心优先用reshapesize()/shape用于获取形状信息。维度操作transpose交换维度、unsqueeze/squeeze增 / 删维度、cat拼接张量是维度调整高频函数。特殊张量创建arange生成序列、full固定值张量、triu上三角矩阵常用于掩码、索引构造。记忆要点cat要求非拼接维度形状一致triu(diagonal1)是 Transformer 因果掩码的核心unsqueeze是扩展掩码维度的常用操作。

相关新闻

告别 plist 制作繁琐咕噜分发在线工具iOS 开发一键搞定Plist文件生成

告别 plist 制作繁琐咕噜分发在线工具iOS 开发一键搞定Plist文件生成

做 iOS 开发的小伙伴们,是不是还在为 plist 文件制作头疼?手动编写 XML 代码容易出错,配置参数稍不注意就导致 IPA 无法在线安装,iOS7 后还要求 HTTPS 部署,各种细节踩坑不断?今天必须给大家安利一款宝藏工…

2026/7/3 23:03:59 阅读更多 →
QMdiArea多窗口管理容器。官方demo,搜素mdi。复制,剪切,粘贴

QMdiArea多窗口管理容器。官方demo,搜素mdi。复制,剪切,粘贴

2026/7/4 10:03:59 阅读更多 →
如何选择合适的IP查询工具?精准度与更新频率全面分析

如何选择合适的IP查询工具?精准度与更新频率全面分析

IP地址查询工具广泛应用于网络安全、广告投放、用户行为分析等多个领域。随着技术的进步,市场上涌现出了多种IP查询工具,它们提供了不同的数据维度、精准度和更新频率。然而,不同工具的性能差异较大,用户在选择时常常感到困惑。本…

2026/7/3 12:30:36 阅读更多 →

最新新闻

Netcat内网渗透实战:5分钟掌握文件传输与反向Shell

Netcat内网渗透实战:5分钟掌握文件传输与反向Shell

1. 项目概述:为什么Netcat是内网渗透的“瑞士军刀”如果你经常在Kali Linux或者CentOS这类Linux环境下工作,尤其是涉及到系统管理、应急响应或者安全测试,那么Netcat(简称nc)这个名字你一定不陌生。它被誉为网络工具中…

2026/7/4 15:42:31 阅读更多 →
最小化均方误差(MSE)与频繁主义建模实战指南

最小化均方误差(MSE)与频繁主义建模实战指南

1. 这不是数学课,是解决实际问题的工具箱:从“最小化均方误差”说起 你手头有一组传感器读数,但它们总在真实值附近晃悠;你训练了一个房价预测模型,结果有的房子估高了50万,有的又低估了80万;你…

2026/7/4 15:40:31 阅读更多 →
3步快速上手:终极Google Cloud Vision图像识别项目实战指南

3步快速上手:终极Google Cloud Vision图像识别项目实战指南

3步快速上手:终极Google Cloud Vision图像识别项目实战指南 【免费下载链接】cloud-vision Sample code for Google Cloud Vision 项目地址: https://gitcode.com/gh_mirrors/cl/cloud-vision 你是否曾经想过,如何让计算机像人类一样"看懂&q…

2026/7/4 15:40:31 阅读更多 →
DeepSeek转型AI基础设施:从大模型到企业级MaaS平台

DeepSeek转型AI基础设施:从大模型到企业级MaaS平台

1. 项目概述:从大模型公司到AI基础设施服务商的转身 “DeepSeek不想只做大模型了”——这句话最近在技术圈传开时,不少同行第一反应是:他们刚把V2训出来,R1刚跑通多模态,怎么就“不想”了?其实这话不是放弃…

2026/7/4 15:40:31 阅读更多 →
基于改进YOLOv8的动物检测与分类系统实现

基于改进YOLOv8的动物检测与分类系统实现

1. 动物检测与分类系统概述 在计算机视觉领域,动物检测与分类一直是一个具有挑战性且应用广泛的研究方向。随着深度学习技术的快速发展,基于YOLO系列算法的目标检测系统已经在多个领域展现出卓越性能。本文将详细介绍一个基于改进YOLOv8的动物检测与分类…

2026/7/4 15:38:30 阅读更多 →
元启发式算法实战指南:从原理到工业级VRPTW优化

元启发式算法实战指南:从原理到工业级VRPTW优化

1. 什么是“Metaheuristics”?它不是玄学,而是工程实践中反复锤炼出来的“问题求解导航系统”“Metaheuristics”这个词一出现,很多人第一反应是:又一个拗口的学术黑话。但如果你做过物流路径优化、芯片布线、广告投放组合决策、新…

2026/7/4 15:38:30 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻