|
|
51CTO旗下网站
|
|
移动端

2.5 开始使用激活函数

《Python深度学习实战:75个有关神经网络建模、强化学习与迁移学习的解决方案》第2章前馈神经网络,本章的重点是为FNN 和其他网络拓扑的常见实现问题提供解决方案。本章讨论的技术也适用于后续内容。本节为大家介绍开始使用激活函数。

作者:程国建/周冠武 译来源:机械工业出版社|2018-08-30 18:46

2.5 开始使用激活函数

如果只使用线性激活函数,神经网络将代表大量的线性组合。然而,神经网络的功用在于它们对复杂非线性行为的建模能力。在前面的方案中简单介绍了非线性激活函数Sigmoid 和ReLU,还有很多流行的非线性激活函数,如ELU、Leaky ReLU、TanH 和Maxout。

没有一条关于哪个激活最适合隐层神经元的规则。深度学习是一个相对较新的领域,大多数结果是通过反复试验和误差调整来获得,而不是数学证明。对于输出神经元,使用单个输出神经元和线性激活函数来执行回归任务。对于具有n 类的分类任务,使用n 个输出节点和一个Softmax 激活函数。Softmax 函数迫使网络输出0~1 之间的概率为互斥类,概率总和为1。对于二元分类,也可以使用单个输出节点和Sigmoid 激活函数输出概率值。

为隐层神经元选择正确的激活函数至关重要。在反向传播过程中,更新取决于激活函数的导数。对于深度神经网络,更新权重的梯度可以在前几层(也称为梯度渐变问题)中变为零,或者可以指数级增长(也称为梯度爆炸问题)。特别是当激活函数仅在小值时取导数(例如Sigmoid 激活函数)或激活函数导数取值大于1 时,上述情况尤为明显。

ReLU 等激活函数可以防止这种情况发生。当输出为正时,ReLU 的导数为1,否则为0。当使用ReLU 激活函数时,会产生一个稀疏网络,其数量相对较少。在这种情况下,通过网络传递的损失似乎更有用。在一些情况下,ReLU 导致太多的神经元死亡。在这种情况下,应该尝试一个变种,比如Leaky ReLU。在下一个方案中,用深度FNN 对手写数字进行分类,以此来对比Sigmoid 和ReLU 激活函数之间的结果差异。

如何去做…

1)导入函数库和数据集:

2)加载MNIST 数据集:

3)显示每个标签的示例并输出对显示每个标签的计数:

获得如图2.9 所示结果。

4)预处理数据:

5)用Sigmoid 激活函数定义模型:

6)使用ReLU 激活函数定义模型:

7)创建一个回调函数来存储每个批次的损失值:

8)运行模型:

9)绘制损失分布图例:

这段代码给出了如图2.10 所示的结果。

10)提取每层模型的最大权重:

11)绘制两个模型的权重分布图例:

得到如图2.11 所示结果。

在第3 章 卷积神经网络 中,将向读者展示如何在MNIST 数据集上获得超过99%的精度。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

基于Project2003的项目管理

本书的上一版本《基于Project 2002的项目管理》上市以后得到了读者的欢迎,为了更好地将Project 2003新版本的应用介绍给读者,我们重新进行...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊