You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch张量维度处理解析:创建与聚合中的参数行为

PyTorch张量维度基础:创建与聚合操作详解

1. 创建张量时size参数的行为逻辑

size参数(或直接传入整数/元组作为形状参数)用于定义张量的层级结构,每个元素对应一个维度的长度,顺序从外到内对应张量的dim=0到dim=N-1:

  • 单个整数:生成1维张量(形状为(n,)),比如torch.zeros(size=5)创建长度为5的1维张量。
  • 整数元组:生成对应维度的张量,元组长度就是张量的阶数(维度数)。比如torch.rand(size=(2, 3, 4))创建3维张量,形状为(2, 3, 4),对应常见的「批量数-通道数-特征数」结构。
  • 注意:torch.Tensor()构造器直接传形状参数(如torch.Tensor(2,3))和用size参数效果一致,而torch.tensor()则是从输入数据推断形状,无需指定size。

2. 聚合/变换方法中的axis(或dim)参数行为

PyTorch中axis和dim是完全等价的参数,用于指定操作生效的维度层级,以下是常见方法的表现:

2.1 torch.Tensor.sum()

指定axis后,操作会在该维度上对所有元素求和,并压缩该维度(输出张量的形状会移除该维度):

x = torch.tensor([[1,2,3],[4,5,6]])
# 对dim=0(列)求和,输出形状(3,)
x.sum(axis=0)  # tensor([5, 7, 9])
# 对dim=1(行)求和,输出形状(2,)
x.sum(axis=1)  # tensor([6, 15])
# 对所有维度求和,得到标量
x.sum(axis=None)  # tensor(21)

如果需要保留被压缩的维度(方便后续广播操作),可以设置keepdim=True:

x.sum(axis=1, keepdim=True)  # shape=(2,1),输出tensor([[6],[15]])

2.2 torch.Tensor.softmax()

softmax会在指定维度上对元素做归一化,使得该维度下所有元素的和为1,不会改变张量的整体形状:

x = torch.tensor([[1.0,2.0,3.0],[4.0,5.0,6.0]])
# 对每行(dim=1)做softmax,每行元素和为1
x.softmax(axis=1)
# 输出:tensor([[0.0900, 0.2447, 0.6652], [0.0900, 0.2447, 0.6652]])
# 对每列(dim=0)做softmax,每列元素和为1
x.softmax(axis=0)
# 输出:tensor([[0.0474, 0.0474, 0.0474], [0.9526, 0.9526, 0.9526]])

负索引axis=-1表示对最后一个维度操作,这在处理批量数据时非常常用(比如对每个样本的特征维度做softmax)。

3. 核心维度概念总结

  • 张量的维度是层级嵌套结构,从外到内对应dim=0到dim=N-1,负索引dim=-k对应倒数第k个维度。
  • 创建时的size参数直接定义各层级的元素数量,顺序决定了张量的存储和访问逻辑。
  • 操作类方法的axis参数指定操作的作用层级:
    • 聚合类操作(如sum、mean)会压缩指定维度,除非设置keepdim=True。
    • 归一化/变换类操作(如softmax、log_softmax)会在指定维度内计算,保持原形状不变。

内容的提问来源于stack exchange,提问作者Lukas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:48:34