【Pytorch基础】torch.nn.functional.softmax介绍

Softmax从字面上来说,可以分成soft和max两个部分。max故名思议就是最大值的意思。Softmax的核心在于soft,而soft有软的含义,与之相对的是hard硬。很多场景中需要我们找出数组所有元素中值最大的元素,实质上都是求的hardmax。下面使用Numpy模块实现hardmax。 [1]

import numpy as np

a = np.array([1, 2, 3, 4, 5])
a_max = np.max(a)
print(a_max)

通过上面的例子可以看出hardmax最大的特点就是只选出其中一个最大的值,即非黑即白。但是往往在实际中这种方式是不合情理的,比如对于文本分类来说,一篇文章或多或少包含着各种主题信息,我们更期望得到文章对于每个可能的文本类别的概率值(置信度),可以简单理解成属于对应类别的可信度。所以此时用到了soft的概念,Softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。 [1]
即Softmax实现了对输出事件概率的一种约束,使得每个事件的概率值都在[0, 1]之间并且,个概率事件的和为1.

下面给出Softmax函数的定义:
Softmax ⁡ ( z i ) = e z i ∑ c = 1 C e z c \operatorname{Softmax}\left(z_{i}\right)=\frac{e^{z_{i}}}{\sum_{c=1}^{C} e^{z_{c}}}S o f t m a x (z i ​)=∑c =1 C ​e z c ​e z i ​​
其中z i z_{i}z i ​为第i个节点的输出值,C为输出节点的个数,即分类的类别个数。通过Softmax函数就可以将多分类的输出值转换为范围在[0, 1]和为1的概率分布。引入指数函数对于Softmax函数是把双刃剑,即得到了优点也暴露出了缺点。

import torch
import numpy as np

num = [2, 3, 5]

sum_num = np.sum(num)
print(sum_num)

result_sum = num / sum_num
print(result_sum)

num = torch.Tensor(num)
result_torch_sum = torch.softmax(num, dim=0)
print(result_torch_sum)

经过使用指数形式的Softmax函数能够将差距大的数值距离拉的更大。

log_softmax作用:在softmax的结果上再做多一次log运算,

F.log_softmax(x,dim=1) 或者 F.log_softmax(x,dim=0)

2.参数解释

  • x指的是输入矩阵。
  • dim指的是归一化的方式,如果为0是对列做归一化,1是对行做归一化
import torch
import torch.nn.functional as F
logits = torch.rand(2,2)
pred = F.softmax(logits, dim=1)
pred1 = F.log_softmax(logits, dim=1)
print(logits)
print(pred)
print(pred1)

Original: https://blog.csdn.net/zfhsfdhdfajhsr/article/details/124141658
Author: 一穷二白到年薪百万
Title: 【Pytorch基础】torch.nn.functional.softmax介绍

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/757885/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球