Softmax深入理解[译] - AIUAI​www.aiuai.cn

Pytorch的交叉熵nn.CrossEntropyLoss在训练阶段,里面是内置了softmax操作的,因此只需要喂入原始的数据结果即可,不需要在之前再添加softmax层。

Softmax 是非线性函数,主要用于 multi-class classification 任务中分类器的输出端.

import numpy as npdef softmax(x):exp_x = np.exp(x) # ps 下面结果中的e+01 是科学计数法  e+01 = 10#print(exp_x) # [2.20264658e+04 7.38905610e+00 2.35385267e+17 5.45981500e+01]sum_exp_x = np.sum(exp_x)sm_x = exp_x/sum_exp_xreturn sm_xx = np.array([10, 2, 40, 4])
print(np.exp(1)) # 2.718281828459045
print(softmax(x))
# [9.35762297e-14 3.13913279e-17 1.00000000e+00 2.31952283e-16]

2.Softmax 的数值稳定性

#softmax 的概率值可以看出,当元素值范围非常大时,容易出现数值不稳定性.
# 比如,修改上面向量的第三个元素值为 10000,并重新计算 softmaxx = np.array([10, 2, 10000, 4])
print(softmax(x))
#[0.0,  0.0, nan,  0.0]#nan 表示 not-a-number,往往出现在过拟合(overflow) 和 欠拟和(underflow) 中.
#但是,Softmax 为什么会输出这样的结果呢?是不能得到向量的概率分布吗?
# 答案: 一个非常大的数值的指数会是非常、非常大的值,如 , 导致过拟合.

def softmax(x):max_x = np.max(x) # 最大值exp_x = np.exp(x - max_x)sum_exp_x = np.sum(exp_x)sm_x = exp_x/sum_exp_xreturn sm_xx = np.array([10, 2, 10000, 4])
print(softmax(x)) #[0., 0., 1., 0.]
# 可以看出,nan 问题解决了

3. Log Softmax

Softmax 计算的一个关键评估显示了指数计算和除法计算的模式. 是否可以简化这些计算呢?
可以通过优化 log softmax 来代替. 其具有如下更优的特点:[1] - 数值稳定性[2] - log softmax 的梯度计算为加法计算,因为log(a/b)=log(a)-log(b)[3] - 除法和乘法计算被转换成加法,更少的计算量和计算成本[4] - log 函数是单调递增函数,可以更好的利用该特点.softmax 和 log softmax 的计算:
x = np.array([10, 2, 10000, 4])
print(softmax(x)) #[0., 0., 1., 0.]print(np.log(softmax(x))) #[-inf, -inf,   0., -inf]
#回到数值稳定性问题,实际上,log softmax 数值欠拟合
问题: 为什么会这样?  ---> 在对每个元素计算 log 计算时, log(0)是未定义的.

4. Log-Softmax 变形

import numpy as npdef logsoftmax(x, recover_probs=True):# LogSoftMax Implementationmax_x = np.max(x)exp_x = np.exp(x - max_x)sum_exp_x = np.sum(exp_x)log_sum_exp_x = np.log(sum_exp_x)max_plus_log_sum_exp_x = max_x + log_sum_exp_xlog_probs = x - max_plus_log_sum_exp_x # 避免了数值不稳定,减少了计算量# Recover probsif recover_probs:exp_log_probs = np.exp(log_probs)sum_log_probs = np.sum(exp_log_probs)probs = exp_log_probs / sum_log_probsreturn probsreturn log_probsx = np.array([10, 2, 10000, 4])
print(logsoftmax(x,recover_probs=False)) # [-9990. -9998.  0. -9996.]
print(logsoftmax(x, recover_probs=True)) # [0. 0. 1. 0.]

softmax分类器_Softmax 理解相关推荐

  1. SVM和Softmax分类器比较

    参考: 作者:啊噗不是阿婆主 来源:CSDN 原文:https://blog.csdn.net/weixin_38278334/article/details/83002748 1. SVM和Soft ...

  2. 线性SVM与Softmax分类器

    1 引入 上一篇介绍了图像分类问题.图像分类的任务,就是从已有的固定分类标签集合中选择一个并分配给一张图像.我们还介绍了k-Nearest Neighbor (k-NN)分类器,该分类器的基本思想是通 ...

  3. 3.9 训练一个 Softmax 分类器-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.8 Softmax 回归 回到目录 3.10 深度学习框架 训练一个 Softmax 分类器 (Training a Softmax Classifier) 上一个视频中 ...

  4. 训练softmax分类器实例_CS224N NLP with Deep Learning(四):Window分类器与神经网络

    Softmax分类器 我们来回顾一下机器学习中的分类问题.首先定义一些符号,假设我们有训练集 ,其中 为输入, 为标签,共包括 个样本: 表示第 个样本,是一个 维的向量: 表示第 个样本的标签,它的 ...

  5. SVM与SoftMax分类器

    出处:http://blog.csdn.net/han_xiaoyang/article/details/49999299  声明:版权所有,转载请注明出处,谢谢. 转给自己 1. 线性分类器 在深度 ...

  6. 深度学习与计算机视觉(二)线性SVM与Softmax分类器

    2.线性SVM与Softmax分类器 2.1 得分函数(score function) 2.1.1 线性分类器 2.1.2 理解线性分类器 2.2 损失函数 2.2.1 多类别支持向量机损失(Mult ...

  7. 深度学习与计算机视觉系列(3)_线性SVM与SoftMax分类器--在深度学习的视觉分类中的,这两个分类器的原理和比较

    作者: 寒小阳  时间:2015年11月.  出处:http://blog.csdn.net/han_xiaoyang/article/details/49999299  声明:版权所有,转载请注明出 ...

  8. 深度学习系列--1.入坑模型: 线性回归,logistic 回归,softmax分类器

    惭愧啊,读研的时候学得正是模式识别:当看着书本上都是公式推导.博士师兄们也都在公式推导研究新算法的时候,排斥心理到了顶点,从此弃疗. 工作三年,重新捡起,因为更关注实际操作,所以选择了<pyth ...

  9. 训练softmax分类器实例_一个值得深思的问题?为什么验证集的loss会小于训练集的loss...

    编辑:zero 关注 搜罗最好玩的计算机视觉论文和应用,AI算法与图像处理 微信公众号,获得第一手计算机视觉相关信息 在本教程中,您将学习在训练自己的自定义深度神经网络时,验证损失可能低于训练损失的三 ...

最新文章

  1. UA MATH567 高维统计专题1 稀疏信号及其恢复7 LASSO的预测误差与变量选择一致性
  2. sockaddr数据结构
  3. mysql 查找课程最高分_mysql 查询 学生id最高分的科目和日期
  4. mysql gui 有哪些_推荐五款较好的MySQLGUI工具
  5. inner join 与 left join 、right join之间的区别
  6. (二)Graphivz 简单结构图及子图
  7. delphi和python和halcon_【《zw版·Halcon与delphi系列原创教程》Halcon图层与常用绘图函数...
  8. php画图抗锯齿,​CSS3如何实现字体抗锯齿渲染效果?-webkit-font-smoothing属性(实例)...
  9. C#中?与??的区别
  10. php时间戳怎么转换成时间格式,php时间戳如何转换为时间格式
  11. Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表的解决方法
  12. 网络营销的优势和劣势
  13. chart.js使用学习
  14. Kali linux 局域网arp断网攻击
  15. 动态规划算法之断句问题
  16. 个税计算--Java
  17. 怎么远程控制别人电脑
  18. matlab源知识库,MATLAB產生隨機數
  19. 2019年山东事业单位面试真题
  20. 关于Matlab surf 函数的使用

热门文章

  1. rmarkdown添加附件
  2. 欧姆龙CP1H+CIF11与3台施耐德ATV12变频器通讯
  3. LAYOUT精益布局优化
  4. 把一个页面进行四等分
  5. 五个好用的PDF软件推荐!
  6. Sqlserver 双机热备份_主数据库发布(主从备份)
  7. 高考平行报志愿计算机录取规则,高考非平行志愿录取规则
  8. python怎么定义int_python中如何定义int类型
  9. html鼠标放在按钮上变色
  10. OKR之剑·总结篇01:如何开好一场OKR复盘会