资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Python

Pytorch nn.Softmax(dim=?) 详解

Python 更新时间: 发布时间: 计算机考试归档 最新发布

Pytorch nn.Softmax(dim=?) 详解

 本文参考自:Pytorch nn.Softmax(dim=?) - 知乎

原文写得很好了,我这边另外完善了一些细节,让大家理解地更加直白一些。

可以先去看上面的参考文章,也可以直接看我这篇。 

目录

1、tensor1

1)已知该矩阵的维度为(2,2,2,3),我们可以用(d0,d1,d2,d3)来表示(2,2,2,3)。

2)当dim=0时

3)当dim=1时

4)当dim=2时

5)当dim=3时

2、tensor2

1)已知该tensor的维度为(3,3),那么d0=3,d1=3。

2) dim=0时

3)dim=1时


1、tensor1

a = np.asarray([[[[1,1,1],[2,2,2]],                [[3,3,3],[4,10,10]]],                [[[1,1,1], [2,2,2]],                 [[3,3,3], [4,10,10]]]                ],np.float32)print(a.shape)  #(2, 2, 2, 3)

1)已知该矩阵的维度为(2,2,2,3),我们可以用(d0,d1,d2,d3)来表示(2,2,2,3)。

接下来分情况讨论以下运算:

input = torch.from_numpy(a)m0 = nn.Softmax(dim=0)  # dim=0的情况output0 = m0(input)print("output0: ",output0)m1 = nn.Softmax(dim=1)  # dim=1的情况output1 = m1(input)print("output1: ",output1)m2 = nn.Softmax(dim=2)  # dim=2的情况output2 = m2(input)print("output2: ",output2)m3 = nn.Softmax(dim=3)  # dim=3的情况output3 = m3(input)print("output3: ",output3)

2)当dim=0时

我们将整个矩阵划分为d0=2份。每一份里面对应位置的d0=2个数进行softmax运算。

以此类推。

softmax函数的输出不改变原数据维度的大小,最后得到的是

3)当dim=1时

我们将整个矩阵划分为d0=2份(红色框)的基础上,再在这2个区域内分别划分出的d1=2个区域(黄色框),在更小的区域之间的d1=2个数之间进行softmax运算。

 

4)当dim=2时

我们将整个矩阵划分为d0=2份(红色框)的基础上,再在小区域内分别划分出的d1=2个区域(黄色框),再在更小的区域内划分出d2=2个区域(蓝色框),之后在相邻的最小区域(蓝色框)之间的d2=2个数之间进行softmax运算。

5)当dim=3时

我们将整个矩阵划分为d0=2份(红色框)的基础上,再在小区域内分别划分出的d1=2个区域(黄色框),再在更小的区域内划分出d2=2个区域(蓝色框),最后再划分出d3=3个最小区域(绿色框),区域之间的d3=3个数之间进行softmax运算。(简单说就是相邻3个绿色框内的数进行softmax运算)

 有了这个d0,d1,d2,d3...的维度说明之后,我们可以去理解任意一个tensor的Softmax运算,万变不离其宗。

2、tensor2

这里再举一个简单的例子:

x = torch.tensor([[0.7459, 0.5881, 0.4795],                  [0.2894, 0.0568, 0.3439],                  [0.6124, 0.7558, 0.4308]])x_softmax = nn.Softmax(dim=0)(x)  # 每列算print(x_softmax)x_softmax2 = nn.Softmax(dim=1)(x)  # 每行算print(x_softmax2)

1)已知该tensor的维度为(3,3),那么d0=3,d1=3。

2) dim=0时

将tensor分为d0=3个区域,相邻区域间的d0=3个数进行softmax运算。

 也就是按列运算,最后的结果可以计算每一列的总和验证下。

3)dim=1时

将tensor分为d0=3个区域,在小区域内再划分d1=3个区域,相邻的最小区域之间的d1=3个数进行softmax运算。(即各个相邻的3个蓝色框内的数进行softmax运算。)

 也就是按行运算。

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1095090.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【Pytorch nn.Softmax(dim=?) 详解】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2