一、什么是 dim 参数?

在 PyTorch 的 softmax 函数中,dim 参数指定了对输入张量(tensor)的哪个维度应用 softmax 计算。

  • dim=0:表示沿着第 0 维度(行方向)进行 softmax 计算。
  • dim=-1:表示沿着最后一个维度(对于一维张量来说就是唯一的一个维度)进行 softmax 计算。
scores = torch.tensor([0.2, 0.02, 0.15, 0.15, 1.3, 0.5, 0.06, 1.1, 0.05, 3.75])  #(10,)
probabilities = torch.softmax(scores, dim=0)  #或者dim=-1
print(probabilities)

❌ 错误理解

你可能认为:

  • dim=0 和 dim=-1 在这里是一样的效果。

但实际上,对于一个一维张量(如 [0.2, 0.02, ...]),dim=0dim=-1 确实是等价的,因为它们都指向唯一的那个维度。

✅ 正确理解:多维张量的情况

当输入是一个多维张量时,dim 参数的作用就变得明显了。

例如:

# 二维张量示例
scores_2d = torch.tensor([
    [0.2, 0.02, 0.15],
    [0.15, 1.3, 0.5],
    [0.06, 1.1, 0.05],
    [3.75, 0.2, 0.02]
])

# dim=0: 沿着行方向计算 softmax
probabilities_row = torch.softmax(scores_2d, dim=0)

# dim=1 或 dim=-1: 沿着列方向计算 softmax
probabilities_col = torch.softmax(scores_2d, dim=1)
 dim=0 的效果
# probabilities_row 结果类似于:
tensor([[0.0849, 0.0005, 0.0849],
        [0.0849, 0.9995, 0.5762],
        [0.0849, 0.0000, 0.0849],
        [0.7453, 0.0000, 0.2540]])
  • 对每一列分别计算 softmax,使得每列的和为 1。
🔹 dim=1 或 dim=-1 的效果
# probabilities_col 结果类似于:
tensor([[0.4750, 0.0020, 0.5230],
        [0.0321, 0.9955, 0.0024],
        [0.0045, 0.9955, 0.0000],
        [0.9999, 0.0005, 0.0000]])
  • 对每一行分别计算 softmax,使得每行的和为 1。
参数 作用
dim=0 沿着第 0 维度(行方向)计算 每列softmax,适用于多维张量
dim=-1 沿着最后一个维度计算 softmax,对于一维张量与 dim=0 等效,但对多维张量则按列计算

 二、浓缩小结

1.首先dim=-1是指右数第一个维度

2.首先看这个张量的shape

  • (10,) 一维 ,那么dim=0和-1都是指这一个维度
  • (3,2) 二维,即第0维和第1维,那么dim=0和dim=-1是不同的,这里的dim=-1是指第1维

3.softmax(dim)

  • softmax(scores,dim=0)是按行计算每列的softmax值,所以每列的值(也就是概率)相加为1
  • 同样softmax(scores,dim=1)是按列计算每行的softmax值,所以每行的值(也就是概率)相加为1

三、实际应用建议

        直接使用dim=-1

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐