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
相关产品推荐
相关产品推荐

