2026/5/20 14:03:12
网站建设
项目流程
网站建设工作室07fly,门户论坛模板,做外贸的物流网站,网站打不开深入解析 torch.argmax 中 dim1 与 one-hot 转整数标签的关系
你想理解在 torch.argmax(y_true_cce, dim1) 中参数 dim1 的具体含义#xff0c;尤其是结合把 one-hot 标签转换为整数标签的场景——这是 PyTorch 处理张量维度的核心基础#xff0c;我会用通俗的语言可视化的例…深入解析 torch.argmax 中 dim1 与 one-hot 转整数标签的关系你想理解在torch.argmax(y_true_cce, dim1)中参数dim1的具体含义尤其是结合把 one-hot 标签转换为整数标签的场景——这是 PyTorch 处理张量维度的核心基础我会用通俗的语言可视化的例子讲清楚让你一眼看懂。一、dim维度/轴的核心定义dim也可以写成axis是 PyTorch 张量的维度/轴参数本质是指对张量进行操作的“方向”。PyTorch 中维度从0开始计数不同的dim对应不同的操作方向核心是“沿着这个维度去计算/取值”。先看我们之前的y_true_cce张量它的结构和形状是关键import torch y_true_cce torch.tensor([[0, 1, 0], [1, 0, 0]], dtypetorch.float32) print(张量内容) print(y_true_cce) print(张量形状shape, y_true_cce.shape) # 输出 torch.Size([2, 3])输出张量内容 tensor([[0., 1., 0.], [1., 0., 0.]]) 张量形状shape torch.Size([2, 3])这个张量的shape(2,3)表示dim0对应第一个维度“行维度”方向是垂直方向遍历每一行dim1对应第二个维度“列维度”方向是水平方向遍历每一列。可以用可视化更直观理解# y_true_cce 的结构 行0样本0[0, 1, 0] → 列0 列1 列2 行1样本1[1, 0, 0] → 列0 列1 列2 ↑ ↑ dim0 dim1 垂直 水平二、dim1 在 torch.argmax 中的具体作用torch.argmax()的核心功能是返回指定维度上“最大值所在的索引”。结合dim1就是对张量的每一行每个样本沿着列的方向dim1找最大值的索引。1. 针对 one-hot 标签的实际意义one-hot 标签的特点是“每行只有1个1最大值其余都是0”所以dim1就是找每行中“1”所在的列索引——这个索引正好对应样本的真实类别比如列1对应类别1列0对应类别0。2. 代码拆解验证# 对 y_true_cce 执行 torch.argmax(dim1) y_true_from_onehot torch.argmax(y_true_cce, dim1) print(dim1 时的结果, y_true_from_onehot) # 输出 tensor([1, 0]) # 对比如果用 dim0 会怎样反例帮助理解 y_dim0 torch.argmax(y_true_cce, dim0) print(dim0 时的结果, y_dim0) # 输出 tensor([1, 0, 0])结果解释dim1对第一行[0,1,0]列方向最大值是1索引是1 → 结果第一个值是1对第二行[1,0,0]列方向最大值是1索引是0 → 结果第二个值是0最终得到[1,0]正好是我们需要的整数标签。dim0反例对第一列[0,1]行方向最大值是1索引是1 → 结果第一个值是1对第二列[1,0]行方向最大值是1索引是0 → 结果第二个值是0对第三列[0,0]行方向最大值是0索引是0 → 结果第三个值是0最终得到[1,0,0]这是按列找最大值索引和我们要的“每个样本的类别”无关。三、通用规律dim 参数的记忆方法对于形状为(N, C)的张量N样本数C类别数比如之前的 (2,3)dim 值操作方向适用场景dim0沿“列”的垂直方向按列操作找每列的最大值/均值比如统计所有样本在某类别上的最大值dim1沿“行”的水平方向按行操作对每个样本每行找类别索引one-hot转整数标签、计算每行的概率和等总结dim是张量的“操作方向”从0开始计数dim1对应二维张量的“列方向”水平方向在torch.argmax(y_true_cce, dim1)中dim1表示对每个样本每行找列方向上最大值的索引正好提取 one-hot 标签的类别索引若张量形状是(样本数, 类别数)将 one-hot 转整数标签必须用dim1用dim0会得到无意义的结果。注文档部分内容可能由 AI 生成