pytorch从F.softmax(dim)出发,看数学解释和各种函数维度的解释

可以先看【2.例子】再看1的数学

1.dim数学定义:

– 二维矩阵

当矩阵x是二维的时候(这个大家都懂,行列去理解

  1. dim=0,代表在dim=0维上的概率分布
    ∑ i = 0 N x [ i , j ] = 1 \sum_{i=0}^N x[i,j ]=1 i=0Nx[i,j]=1 j是个固定值,是常数;N的值来自len(x[:,j])-1,也就是一共多少行减1;

代码表现方式:

sum(x[:,j]) = 1  → Tensor
  1. dim=1代表在dim=1维上的概率分布:
    ∑ i = 0 N x [ j , i ] = 1 \sum_{i=0}^N x[j,i]=1 i=0Nx[j,i]=1 j是个固定值,是常数;N的值来自len(x[j,:])-1,也就是一共多少列;

代码表现方式:

sum(x[j,:]) = 1  → Tensor
– 三维矩阵

当矩阵x是三维的时候(大家普遍困惑d的)大家关注i的位置就行

  1. dim=0代表在dim=0维上的概率分布:
    ∑ i = 0 N x [ i , j , k ] = 1 \sum_{i=0}^N x[i,j,k]=1 i=0Nx[i,j,k]=1j,k是个固定值,是常数;N的值来自len(x[:,j,k])-1;
  2. dim=1代表在dim=1维上的概率分布:
    ∑ i = 0 N x [ j , i , k ] = 1 \sum_{i=0}^N x[j,i,k]=1 i=0Nx[j,i,k]=1j,k是个固定值,是常数;N的值来自len(x[j,:,k])-1;
  3. dim=2代表在dim=2维上的概率分布:
    ∑ i = 0 N x [ j , k , i ] = 1 \sum_{i=0}^N x[j,k,i]=1 i=0Nx[j,k,i]=1j,k是个固定值,是常数;N的值来自len(x[j,k,:])-1;

2.举例

又到了大家最爱的举例环节

二维矩阵X

准备数据

x = torch.tensor([[2,3,4],[1,3,2]],dtype=torch.float32)
'''构建的数据
tensor([[2., 3., 4.],
        [1., 3., 2.]])'''
  1. dim=0
x_soft = F.softmax(x,dim=0)
# outputs
tensor([[0.7311, 0.5000, 0.8808],
        [0.2689, 0.5000, 0.1192]])
            ↑       ↑      ↑
            '注意箭头,和为1'

你会发现:
(1) . x_soft[0,0] + x_soft[1,0] = 1 --→ sum(x_soft[:,0])=1
(2) . x_soft[0,1] + x_soft[1,1] = 1 --→ sum(x_soft[:,0])=1
(3) . x_soft[0,2] + x_soft[1,2] = 1 --→ sum(x_soft[:,0])=1

代码如下

In [1]: sum(x_soft[:, 0])
Oot[1]: tensor(1.) # 输出为1

In [2]: sum(x_soft[:, 1])
Oot[2]: tensor(1.) # 输出为1

In [3]: sum(x_soft[:, 2])
Oot[3]: tensor(1.) # 输出为1
  1. dim=1
x_soft = F.softmax(x,dim=1)
# outputs
tensor([[0.0900, 0.2447, 0.6652],    ← ←
        [0.0900, 0.6652, 0.2447]])   ← ←
                               '注意箭头和为1'

你会发现:
(1) . x[0,0] + x[0,1] + x[0,2] = 1 --→ sum(x_soft[:,0])=1
(2) . x[1,0] + x[1,1] + x[1,2] = 1 --→ sum(x_soft[:,0])=1

代码如下

In [1]: sum(x_soft[:, 0])
Oot[1]: tensor(1.) # 输出为1

In [2]: sum(x_soft[:, 1])
Oot[2]: tensor(1.) # 输出为1
三维矩阵

准备数据

y = torch.tensor([[[1,2,1,2],[2,3,2,1],[1,2,3,4]],[[2,3,2,5],[3,4,6,1],[1,8,3,2]]], dtype=torch.float32)
'''构建的数据
tensor([[[1., 2., 1., 2.],
         [2., 3., 2., 1.],
         [1., 2., 3., 4.]],

        [[2., 3., 2., 5.],
         [3., 4., 6., 1.],
         [1., 8., 3., 2.]]])'''
  1. dim=0,是在dim=0维上的概率分布,如 y[0][2][3]+y[1][2][3]=1
y_soft = F.softmax(y, dim=0)
# outputs  
tensor([[[0.2689, 0.2689, 0.2689, 0.0474],[示例]
         [0.2689,0.2689, 0.0180, 0.5000],[0.5000, 0.0025, 0.5000, 0.8808]],
   
        [[0.7311, 0.7311, 0.7311, 0.9526],[示例]
         [0.7311,0.7311, 0.9820, 0.5000],[0.5000, 0.9975, 0.5000, 0.1192]]])

你会发现:
(1) . y_soft[0,0,0] + y_soft[1,0,0] = 1 --→ sum(y_soft[:,0,0])=1

(n) . y_soft[0,1,2] + y_soft[1,1,2] = 1 --→ sum(y_soft[:,1,1])=1

(24) y_soft[0,3,3] + y_soft[1,3,3] =1 --→ sum(y_soft[:,3,3])=1

代码不写了,有兴趣的可以写写

  1. dim=1,是在dim=1维上的概率分布,如 y[1][0][3]+y[1][1][3]+y[2][2][3]=1
y_soft = F.softmax(y, dim=1)
# outputs  
tensor([[[0.2119, 0.2119, 0.0900, 0.1142],
         [0.5761, 0.5761, 0.2447, 0.0420],
         [0.2119, 0.2119, 0.6652, 0.8438]],[示例]
        [[0.2447, 0.0066,0.0171, 0.9362],
         [0.6652, 0.0179,0.9362, 0.0171],
         [0.0900, 0.9756,0.0466, 0.0466]]])

你会发现:
(1). y_soft[0,0,0] + y_soft[0,1,0] + y_soft[0,2,0] = 1 --→ sum(y_soft[0,:,0])=1

(n). y_soft[1,0,0] + y_soft[1,1,0] + y_soft[1,2,0] = 1 --→ sum(y_soft[1,:,1])=1

(n). y_soft[2,0,2] + y_soft[2,1,2] + y_soft[2,2,2] = 1 --→ sum(y_soft[1,:,1])=1
代码不写了,有兴趣的可以写写

  1. dim=2,是在dim=2维上的概率分布,如 y[1][4][0]+y[1][4][1]+y[1][4][2]+y[1][4][3]=1
    同理,可以自己写写看。
  • 19
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值