Day26_【深度学习(6)_神经网络NN(1.1)激活函数_softmax详解篇】
·
一、什么是 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=0 和 dim=-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
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)