机器学习入门(06)— 输出层多元分类、softmax 归一化指数函数以及输出层的神经元数量
输出层所用的激活函数,要根据求解问题的性质决定。一般地,
- 回归问题可以使用恒等函数,也就是说会将输入按原样输出;
- 二元分类问题可以使用
sigmoid
函数; - 多元分类问题可以使用
softmax
函数;
1. softmax 函数定义
用图表示 softmax
函数的话,如图 3-22所示。图 3-22中,softmax
函数的输出通过箭头与所有的输入信号相连。这是因为,从式(3.10)可以看出,输出层的各个神经元都受到所有输入信号的影响。
2. softmax 函数实现
在 IPython 中实现过程:
In [1]: import numpy as npIn [2]: a = np.array([0.3, 2.9, 4.0])In [3]: exp_a = np.exp(a)In [4]: exp_a
Out[4]: array([ 1.34985881, 18.17414537, 54.59815003])In [5]: sum_exp_a = np.sum(exp_a)In [6]: sum_exp_a
Out[6]: 74.1221542101633In [7]: y = exp_a/sum_exp_aIn [8]: y
Out[8]: array([0.01821127, 0.24519181, 0.73659691])In [9]:
将其封装成函数显示为:
In [9]: def softmax(x):...: exp_x = np.exp(x)...: sum_exp_x = np.sum(exp_x)...: y = exp_x/sum_exp_x...: return y...: In [10]: a = np.array([0.3, 2.9, 4.0])In [11]: softmax(a)
Out[11]: array([0.01821127, 0.24519181, 0.73659691])In [12]:
3. softmax 函数缺陷
softmax
函数的实现中要进行指数函数的运算,但是此时指数函数的值很容易变得非常大。比如,e10 的值会超过 20000,e100 会变成一个后面有 40 多个 0 的超大值,e1000 的结果会返回一个表示无穷大的 inf
。如果在这些超大值之间进行除法运算,结果会出现“不确定”的情况,也就是人们常说的发生溢出问题。
4. softmax 函数改进
式(3.11)说明,在进行 softmax
的指数函数的运算时,加上(或者减去)某个常数并不会改变运算的结果。这里的 C
可以使用任何值,但是为了防止溢出,一般会使用输入信号中的最大值。我们来看一个具体的例子。
In [13]: a = np.array([1010, 1000, 990])In [14]: np.exp(a)/ np.sum(np.exp(a))
Out[14]: array([nan, nan, nan])In [16]: c = np.max(a)In [17]: c
Out[17]: 1010In [18]: a - c
Out[18]: array([ 0, -10, -20])In [19]: np.exp(a-c)/np.sum(np.exp(a-c))
Out[19]: array([9.99954600e-01, 4.53978686e-05, 2.06106005e-09])In [20]:
如该例所示,通过减去输入信号中的最大值(上例中的 c
),我们发现原本为 nan
(not a number
,不确定)的地方,现在被正确计算了。综上,我们可以像下面这样实现 softmax
函数。
In [22]: def softmax(a):...: c = np.max(a)...: exp_a = np.exp(a-c)...: sum_exp_a = np.sum(exp_a)...: y = exp_a / sum_exp_a...: return y...: In [23]:
5. softmax 函数特征
使用 softmax()
函数,可以按如下方式计算神经网络的输出。
In [5]: a = np.array([0.3, 2.9 ,4.0])In [6]: y = softmax(a)In [7]: y
Out[7]: array([0.01821127, 0.24519181, 0.73659691])In [8]: np.sum(y)
Out[8]: 1.0In [9]:
如上所示,softmax
函数的输出是 0.0 到 1.0之间的实数。并且,softmax
函数的输出值的总和是 1。输出总和为 1 是 softmax
函数的一个重要性质。正因为有了这个性质,我们才可以把 softmax
函数的输出解释为“概率”。
比如,上面的例子可以解释成 y[0] 的概率是 0.018(1.8%),y[1] 的概率是 0.245(24.5%),y[2] 的概率是0.737(73.7%)。
这里需要注意的是,即便使用了 softmax
函数,各个元素之间的大小关系也不会改变。这是因为指数函数(y = exp(x)
)是单调递增函数。实际上,上例中 a
的各元素的大小关系和 y
的各元素的大小关系并没有改变。比如,a
的最大值是第 2 个元素,y
的最大值也仍是第 2 个元素。
一般而言,神经网络只把输出值最大的神经元所对应的类别作为识别结果。并且,即便使用 softmax
函数,输出值最大的神经元的位置也不会变。
因此,神经网络在进行分类时,输出层的 softmax
函数可以省略。在实际的问题中,由于指数函数的运算需要一定的计算机运算量,因此输出层的 softmax
函数一般会被省略。
6. 输出层神经元数量
输出层的神经元数量需要根据待解决的问题来决定。
对于分类问题,输出层的神经元数量一般设定为类别的数量。比如,对于某个输入图像,预测是图中的数字 0 到 9 中的哪一个的问题(10 类别分类问题),可以像图3-23 这样,将输出层的神经元设定为 10 个。
如图 3-23 所示,在这个例子中,输出层的神经元从上往下依次对应数字 0, 1, . . ., 9。此外,图中输出层的神经元的值用不同的灰度表示。这个例子中神经元 y2
颜色最深,输出的值最大。这表明这个神经网络预测的是 y2
对应的类别,也就是“2”。
参考:《深度学习入门:基于Python的理论与实现》
机器学习入门(06)— 输出层多元分类、softmax 归一化指数函数以及输出层的神经元数量相关推荐
- 机器学习入门(13)— Affine 仿射层、Softmax 归一化指数函数层实现
1. 一维 Affine 仿射层 我们回顾下之前为了计算加权信号的总和,使用了矩阵的乘积运算 NumPy 中是 np.dot() , 参照代码如下: In [7]: X = np.random.ran ...
- 机器学习入门(03)— 激活函数分类(阶跃函数和 sigmoid 函数的理论、实现、显示以及区别、非线性函数、ReLU 函数、tanh 函数)
各种激活函数介绍,请参考下面链接: https://en.wikipedia.org/wiki/Activation_function 1. 阶跃函数 1.1 理论 式(3.3)表示的激活函数以阈值为 ...
- 机器学习入门案例:鸢尾花数据集分类 绘制PR曲线
案例使用鸢尾花数据集进行分类预测,并绘制评价分类性能的PR曲线图 认识分类任务和数据集 Iris(鸢尾花)数据集 案例演示中使用的是有监督的机器学习算法:SVM 支持向量机 建立模型的流程如下: 训练 ...
- 机器学习入门 ————》 一元及多元线性回归
1.线性回归(line Regression) 回归,指研究一组随机变量(Y1 ,Y2 ,-,Yi)和另一组(X1,X2,-,Xk)变量之间关系的统计分析方法,又称多重回归分析.通常Y1,Y2,-,Y ...
- 机器学习入门 --- 贝叶斯 - 中文新闻分类任务
文本分析 停用词 语料中大量出现,但没有大的用处 Tf-idf 关键词提取 TF−IDF=词频(TF)∗逆文档频率(IDF)TF-IDF = 词频(TF)*逆文档频率(IDF)TF−IDF=词频(TF ...
- 机器学习入门 01 —— 机器学习概述
文章目录 系列文章 机器学习概述 1.1.人工智能概述 1 人工智能应用场景 2 人工智能小案例 3 人工智能发展必备三要素 4 人工智能.机器学习和深度学习 5 小结 1.2.人工智能发展历程 1. ...
- 机器学习入门 笔记(二) 机器学习基础概念
第二章 机器学习基础概念 1.机器的数据 2.机器学习的主要任务 3.监督学习和非监督学习 4.批量.在线学习.参数.非参数学习 5.哲学思考 6.环境的搭建 1.机器的数据 我们以鸢尾花的数据为例. ...
- 添加softmax层_PyTorch入门之100行代码实现softmax回归分类
本文首发于公众号[拇指笔记] 1. 使用pytorch实现softmax回归模型 使用pytorch可以更加便利的实现softmax回归模型. 1.1 获取和读取数据 读取小批量数据的方法: 首先是获 ...
- 机器学习入门(05)— 使用 NumPy 实现 3 层简单神经网络
我们以图 3-15 的3 层神经网络为对象,实现从输入到输出的(前向)处理.在代码实现方面,使用上一节介绍的 NumPy 多维数组. 1. 符号定义 2. 各层之间信号传递 从输入层到第 1 层的 第 ...
最新文章
- MPB:生态环境中心韩丽丽等-土壤病毒组富集及DNA提取
- 烟雾检测电路c语言程序,烟雾报警器电路图大全(六款模拟电路设计原理图详解)...
- 职场不设限:真正的AI产品经理太少了……
- comsol显示电场计算结果_在 COMSOL 中构建磁流体动力学多物理场模型
- flask 中文编码解码
- css布局模型(摘抄自慕课)
- centos7添加用户并授权root权限
- 简单的爬虫爬取教务网获取成绩
- Nginx+Tomcat负载平衡
- 学习笔记(03):2020软考数据库系统工程师-基础知识培训视频-计算机系统--安全性可靠性与性能评测(一)...
- QCIF、CIF、DCIF、D1分辨率
- 华三OSPF多区域配置实例
- 【信息系统项目管理师】重点整理:高项知识地图
- 有关结合律和优先规律
- 国科大学习资料--高级软件工程-复习题设计题答案
- android源码分析
- python绘制缓和曲线_autocad绘制缓和曲线
- 【分区助手】如何扩大C盘容量?
- C语言字符串使用指南
- App个人开发者已末路穷途
热门文章
- python 位运算与等号_Python 运算符
- 2022-2028年中国复合软管行业市场行情动态及发展趋向分析报告
- bert推理速度太慢如何解决
- 各种优化算法公式快速回忆优化器-深度学习
- 独家 | TensorFlow 2.0将把Eager Execution变为默认执行模式,你该转向动态计算图了...
- 理解和实现分布式TensorFlow集群完整教程
- GStreamer 1.18.4稳定的错误修复版本
- 全卷积目标检测:FCOS
- js生成随机数函数,倒计时函数
- Android 监听多个Spinner 的点击事件