Day26_【深度学习(6)_神经网络NN(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