转载本文请联系python和大数据分析公众号。激活函数是运行在人工神经网络的神经元上的函数,负责将神经元的输入映射到输出。如果不使用激活函数,则每一层的输出都是上层输入的线性函数。无论神经网络有多少层,输出都是输入的线性组合。这是最原始的感知器。如果使用,激活函数将非线性因素引入神经元,使神经网络可以任意逼近任何非线性函数,从而使神经网络可以应用于许多非线性模型。#!/usr/bin/envpython#-*-coding:UTF-8-*-#_ooOoo_#o8888888o#88"."88#(|-_-|)#O\=/O#____/`---'\____#.'\\||//`.#/\\|||:|||//\#/_|||||-:-|||||-\#||\\-///||#|\_|''\---/''|_/|#\.-\__`-`___/-./#___`..'/--.--\`.__#.""'<`.___\_<|>_/___.'>'"".#||:`-\`.;`\_/`;.`/-`:||#\\`-.\___\/___/.-`//#==`-.____`-.___\_____/___.-`____.-'==#`=---=''''@Project:pythonalgorithms@File:Activationfunction.py@Author:无敌人生一醉@Date:2021/8/110:14'''importnumpyasnpfrommatplotlibimportpyplotaspltdefdrawpic(x,y,label='',title=''):plt.figure(figsize=(10,8))ax=plt.gca()#通过gca获取当前坐标轴:getcurrentaxisplt.rcParams['font.sans-serif']=['SimHei']#绘图中文plt.rcParams['axes.unicode_minus']=False#绘图负号plt.plot(x,y,label=label)#设置图片右边框和上边框不显示ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')#移动x轴和y轴的位置,即下边框和左边框的位置图片的#data表示通过value设置x轴的位置,绑定x轴到y=0的位置ax.spines['bottom'].set_position(('data',0))#axes表示以百分比的形式设置轴的位置,即y轴绑定到x轴50%的位置ax.spines['left'].set_position(('axes',0.5))#ax.spines['left'].set_position(('data',0))plt.title(title)plt.legend(loc='upperright')plt.show()if__name__=='__main__':std=0.1#标准差为0.1avg=1#平均值为1x=np.linspace(avg-5*std,avg+5*std,100)y=normaldistribution(x,avg,std)drawpic(x,y,'normaldistribution','normaldistributionfunction')x=np.linspace(-5,5,100)y=sigmoid(x)drawpic(x,y,'sigmoid','sigmoidActivationfunction')y=tanh(x)drawpic(x,y,'tanh','tanhActivationfunction')y=stepfunction(x)drawpic(x,y,'tanh','stepActivationfunction')y=relu(x)drawpic(x,y,'relu','reluActivationfunction')y=leakyrelu(x)drawpic(x,y,'leakyrelu','leakyreluActivationfunction')y=softmax(x)drawpic(x,y,'softmax','softmaxActivationfunction')#求正态分布值,avg代表期望值,std代表标准差defnormaldistribution(x,avg=0,std=1):returnnp.exp(-(x-avg)**2/(2*std**2))/(np.sqrt(2*np.pi)*std)#returnp.exp(-(x-avg)**2/(2*std**2))/(math.sqrt(2*数学.pi)*#SigmoidFunction#Sigmoid函数是生物学中常见的S型函数,又称S型生长曲线#在信息科学中,由于其单增和反函数单增的特性,Sigmoid函数常被用作神经网络的阈值函数,将变量映射到0到1之间defsigmoid(x):return1/(1+np.power(np.e,-x))#Tanh函数#Tanh是双曲函数之一,Tanh()是双曲正切。#在数学中,双曲正切“Tanh”来源于基本的双曲函数双曲正弦和双曲余弦。#函数tanh(蓝色)与函数sigmoid(橙色)相同,在其饱和区接近0时,容易产生后续梯度消失,计算量大的问题deftanh(x):return(np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))#stepfunctiondefstepfunction(x):returnnp.array(x>0,dtype=np.int32)#ReLUFunction#Relu激活函数(TheRectifiedLinearUnit),用于隐藏层神经元输出。#Relu会导致部分神经元的输出为0,造成网络的稀疏性,降低参数的相互依赖性,缓解过拟合问题的发生。defrelu(x):returnp.maximum(0,x)#leakyReLUfunctiondefleakyrelu(x):returnp.maximum(0.01*x,x)#softmaxfunction#softmaxfunction可以看作是Sigmoid函数的推广,用于多重分类神经网络输出。defsoftmax(x):返回np.exp(x)/np.sum(np.exp(x))
