公司网站建设要注意什么,网络流量分析工具,万能浏览器app,温州市城乡建设厅网站上一篇#xff1a;PyTorch官网demo解读——第一个神经网络#xff08;3#xff09;-CSDN博客 上一篇我们聊了手写数字识别神经网络的损失函数和梯度下降算法#xff0c;这一篇我们来聊聊激活函数。
大佬说激活函数的作用是让神经网络产生非线性#xff0c;类似人脑神经元…上一篇PyTorch官网demo解读——第一个神经网络3-CSDN博客 上一篇我们聊了手写数字识别神经网络的损失函数和梯度下降算法这一篇我们来聊聊激活函数。
大佬说激活函数的作用是让神经网络产生非线性类似人脑神经元一样人脑神经元对输入的处理是非线性的。这个说法有些抽象其实回到我们具体的模型中激活函数的作用是将输出约束在某个预期的范围内同时让输入到输出符合我们预期的分布。例如sigmod函数将输出约束在0~1之间同时如果输入在0周围输出的差异比较大如果输入偏离0较多则输出的差异就比较小。 代码解读
# 激活函数
def log_softmax(x):return x - x.exp().sum(-1).log().unsqueeze(-1)
完整代码请参见第一篇
demo代码中使用了一个自定义的log_softmax激活函数其实这并不是一个标准的log_softmax函数标准的log_softmax函数如下来自PyTorch官网 对以上公式进行一波推导得出参见推导原文 对比上面的代码发现代码里面的实现是没有减去M的但这样也是可行的。
替换激活函数
单单看上面代码的激活函数有时候不是很好理解为什么这样做不要激活函数可以吗用其它激活函数又如何呢下面我们就动手来捣鼓一下看看换几个其它的激活函数会怎样
首先我们把原来用log_softmax作为激活函数的结果跑出来方便后面做对比 接下来我们就来替换几个激活函数看看效果。
1. 替换成softmax函数
代码
def softmax(x):return x.exp() / x.exp().sum(-1).unsqueeze(-1)
运行结果 分析
使用softmax函数训练出来的模型精度略逊于log_softmax但不会相差太多。为什么呢可以留言发表看法。
2. 替换成sigmod函数
代码
def sigmod(x):return 1 / (1 (-x).exp())
运行结果 分析
使用sigmod函数作为激活函数训练出来的模型精度只有0.6094比使用log_softmax差很多说明sigmod函数不能作为分类问题模型的激活函数
3. 替换成tanh函数
代码
def tanh(x):p_exp x.exp()n_exp (-x).exp()return (p_exp - n_exp) / (p_exp n_exp)
运行结果 分析
使用tanh函数作为模型的激活函数训练出来精度为0.7188比使用sigmod函数稍微好点但比log_softmax还是差太多所以tanh函数同样不适合作为分类问题模型的激活函数
总结
通过替换不同类型的激活函数我们可以从侧面看出激活函数对于模型的重要性也引起我们对激活函数的思考算是抛砖引玉吧。在其它模型中如何选择激活函数呢让我们共同学习 如切如磋如琢如磨