torch.nn.functional.softmax()作用简述

首先softmax和log_softmax的关系就是,后者是对前者做了一个log计算,也就是对数函数计算

对数函数(Logarithmic Function)是以(真数)为自变量,指数为因变量,底数为常量的函数。 ——————摘自《百度百科》

函数图像如下

https://bkimg.cdn.bcebos.com/pic/b8014a90f603738d0e94646db11bb051f919eca7?x-bce-process=image/watermark,image_d2F0ZXIvYmFpa2UxMTY=,g_7,xp_5,yp_5/format,f_autoicon-default.png?t=N7T8https://bkimg.cdn.bcebos.com/pic/b8014a90f603738d0e94646db11bb051f919eca7?x-bce-process=image/watermark,image_d2F0ZXIvYmFpa2UxMTY=,g_7,xp_5,yp_5/format,f_auto


 softmax是对指定向量的指定维度进行概率计算,每次所求概率之和为1

import torch
import torch.nn.functional as tnf

softmaxTest = torch.Tensor([2,3,5])

print("tnf.softmax(dim=0):",tnf.softmax(softmaxTest,dim=0))
#print("________________________________________________________________")
#print("tnf.logsoftmax(dim=0):",tnf.log_softmax(softmaxTest,dim=0))
#print("________________________________________________________________")
#print("np.log:",np.log(tnf.softmax(softmaxTest,dim=0)))

先来看看 softmax和log_softmax的关系,其输出分别是

tnf.softmax(0): tensor([0.0420, 0.1142, 0.8438])
________________________________________________________________
tnf.logsoftmax(0): tensor([-3.1698, -2.1698, -0.1698])
________________________________________________________________
np.log: tensor([-3.1698, -2.1698, -0.1698])

确实是log(softmax)  = log_softmax

先说一下softmax的计算方法,以上面的softmaxTest为例,就是0.0420 = \tfrac{(e^2)}{(e^2)+(e^3)+(e^5)}0.1142 = \tfrac{(e^3)}{(e^2)+(e^3)+(e^5)}, 0.8438 = \tfrac{(e^5)}{(e^2)+(e^3)+(e^5)},横向相加,三个数据的和很接近1

现在来分别看看在一个shape为[2,3,3]的张量中dim = 0, dim = 1的情况

softmaxTest = torch.Tensor([   [  [1,2,7]  ,  [2,3,5]  ,  [3,4,3]  ]   ,   [  [2,2,6]  ,  [3,3,4]  ,  [4,4,2]  ]   ])

print("tnf.softmax(0):",tnf.softmax(softmaxTest,0))
print("________________________________________________________________")
print("tnf.softmax(1):",tnf.softmax(softmaxTest,1))
print("________________________________________________________________")
print("tnf.softmax(2):",tnf.softmax(softmaxTest,2))

输出

tnf.softmax(0): tensor([[[0.2689, 0.5000, 0.7311],
         [0.2689, 0.5000, 0.7311],
         [0.2689, 0.5000, 0.7311]],

        [[0.7311, 0.5000, 0.2689],
         [0.7311, 0.5000, 0.2689],
         [0.7311, 0.5000, 0.2689]]])
________________________________________________________________
tnf.softmax(1): tensor([[[0.0900, 0.0900, 0.8668],
         [0.2447, 0.2447, 0.1173],
         [0.6652, 0.6652, 0.0159]],

        [[0.0900, 0.0900, 0.8668],
         [0.2447, 0.2447, 0.1173],
         [0.6652, 0.6652, 0.0159]]])
________________________________________________________________
tnf.softmax(2): tensor([[[0.0025, 0.0067, 0.9909],
         [0.0420, 0.1142, 0.8438],
         [0.2119, 0.5761, 0.2119]],

        [[0.0177, 0.0177, 0.9647],
         [0.2119, 0.2119, 0.5761],
         [0.4683, 0.4683, 0.0634]]])

dim = 0

对[2,3,3]的张量的0维进行求概率,那么他的计算就是概率0.2689和概率0.7311所代表的1,2所计算得来0.2689= \tfrac{(e^1)}{(e^1)+(e^2)}

来自这两个地方的数据

[   [  [1,2,7]  ,  [2,3,5]  ,  [3,4,3]  ]   ,   [  [2,2,6]  ,  [3,3,4]  ,  [4,4,2]  ]   ]

dim = 1

在这个shape为[2,3,3]的张量中,对1维进行求概率,那么就是对三个长度为三的张量的同位元素进行求概率,比如,0.0900= \tfrac{(e^1)}{(e^1)+(e^2)+(e^3)}

  • 28
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: torch.nn.functional.softmax是PyTorch中的一个函数,它可以对输入的张量进行softmax运算。softmax是一种概率分布归一化方法,通常用于多分类问题中的输出层。它将每个类别的得分映射到(0,1)之间,并使得所有类别的得分之和为1。 ### 回答2: torch.nn.functional.softmax是一个用于计算softmax函数的函数。softmax函数将一个向量映射为概率分布,使得向量中每个元素的取值范围在0到1之间,并且所有元素的和为1。 softmax函数的计算公式如下: $$ \text{softmax}(x_i) = \frac{e^{x_i}}{\sum_j^N e^{x_j}} $$ 其中,$x_i$表示输入向量中的第$i$个元素,$N$表示输入向量的长度。 softmax函数常用于多类别的分类问题中,通过将模型的输出结果转化为概率分布,可以更直观地解释模型的预测结果。 torch.nn.functional.softmax函数的输入参数可以是一个向量,也可以是一个矩阵。对于向量的输入,函数会将每个元素应用softmax函数,返回一个具有相同形状的向量;对于矩阵的输入,函数会对矩阵的每一行应用softmax函数,返回一个具有相同形状的矩阵。 在使用torch.nn.functional.softmax函数时,需要注意其在计算过程中可能存在数值稳定性的问题。由于指数运算可能导致数值溢出,因此可以使用softmax的一个变种-softmax函数,即在指数运算之前对输入进行平移,以提高数值稳定性。例如,可以先对输入向量中的每个元素减去向量中的最大值,再执行softmax函数的计算。 总之,torch.nn.functional.softmax是一个用于计算softmax函数的函数,常用于多类别的分类问题中,可以将模型的输出转化为概率分布。在使用时,需要注意数值稳定性的问题。 ### 回答3: torch.nn.functional.softmax是PyTorch中的一个函数,用于进行softmax运算。softmax函数将一个向量的元素作为输入,将其进行归一化处理,使得输出的元素都在[0,1]范围内,并且所有元素相加等于1。 具体来说,softmax函数的计算公式为: softmax(x_i) = exp(x_i) / sum(exp(x_j)), 其中i表示向量中的一个元素,j表示向量中的所有元素。 softmax函数经常用于多分类问题中,用来计算每个类别的概率分布。例如,对于一个包含N个类别的输出向量,softmax函数可以将该向量的每个元素转化为对应类别的概率,其中最大概率对应的类别即为模型预测的类别。 在PyTorch中,torch.nn.functional.softmax函数的使用非常简单。只需要传入一个向量作为输入,函数会自动完成softmax的计算,并返回结果。具体的使用方法如下: import torch import torch.nn.functional as F # 创建一个输入向量,大小为[1, N] input = torch.randn(1, N) # 使用softmax函数计算概率分布 output = F.softmax(input, dim=1) # 输出结果 print(output) 其中,dim参数表示进行softmax运算的维度。在多分类问题中,通常将dim设置为1,表示对输入向量的每一行进行softmax计算。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值