深度学习方法——实验4:代码比较softmax与sigmoid

前言:

老师安排这么个实验,应该是为了让我们形象的理解softmax与sigmoid函数在神经网络中更适合担任什么“职位”,也就是更适合作为中间隐藏层的激活函数还是最终输出层的激活函数

实验下来对于两个激活函数间的不同也算是小有收获,可惜的是要想从中提炼出某些结论,这个实验设计的还是不够严谨,以至于做的时候挺难受,实验总结也是草草了事。

所以关于收获到的内容我就另起一篇文章: 动手学习深度学习——softmax函数与sigmoid函数区别 了,实验就是一个产出知识的过程,就不上代码直接贴图了。

一、实验要求

在计机上验证和测试两种激活函数对应的多层神经网络的原理和算法实现,测试多层神经网络的训练效果,同时查阅相关资料。

二、实验目的

1、掌握Softmax的基本原理;

2、掌握Softmax和交叉熵损失的梯度计算;

3、掌握Softmax反向传播的算法过程;

三、实验内容

题一:

1. 请针对同样的多分类场景,对比SoftMax配合交叉熵损失函数与Sigmoid配合交叉熵损失函数,训练速度和学习效果有没有差异。

  • sigmoid函数作为输出层激活函数:

  • 设置sigmoid对应的交叉熵损失函数:

  • softmax函数作为输出层激活函数:

  • 设置softmax对应的交叉熵损失函数:

  • 无交集多分类结果展示(上面为sigmoid,下面为softmax):

 

  • 有交集多分类结果展示(上面为sigmoid,下面为softmax):

  • 结论:

可以看到对于多分类的问题,softmax作为输出层的神经网络训练速度明显比sigmoid作为输出层的神经网络快,并且对于一些较难分的数据集,softmax的学习效果明显比sigmoid要好。

题二:

2. 请阅读和测试多层神经网络类代码,完成SoftMax类作为隐藏层得实现,与Sigmoid和ReLU对比测试训练效果。

  • softmax函数:

  • 用于隐藏层:

  • 运行结果:不太理想,5000次迭代,损失基本上稳定在0.6上下,分类结果如下。

  • sigmoid函数用于隐藏层:

  • 运行结果:训练速度与softmax差不多,训练结果更理想,损失最终稳定在0.18。

  • relu函数用于隐藏层:

  • 运行结果:损失开始较大但下降速度很快,训练结果略逊于sigmoid,稳定在0.23上下。

四、实验总结

通过本次实验,学生了解了softmax函数与sigmoid函数作为隐藏层和输出层的区别,以及它们对应不同交叉熵损失函数的原因。

猜你喜欢

转载自blog.csdn.net/qq_50571974/article/details/123968689