激活函数ReLU
ReLU函数会使一部分神经元的输出为0,这样就会造成网络的稀疏性,并且减少参数之间的依赖关系,缓解过拟合的发生。
class Relu():
def __init__(self):
#mask是由True/False组成的numpy数组
self.mask=None
def forward(self,x):
#mask将x<=0的地方保存为True,其他的都为False
self.mask=(x<=0)
out=x.copy()
out[self.mask]=0#将True的地方都输出为0,False的地方输出为x
return out
def backward(self,dout):
dout[self.mask]=0#True的地方反向传播会停在这个地方,True的地方设置为0,False的地方将上游的值原封不动的传递给下游
dx=dout
return dx
sigmoid激活函数
使用sigmoid函数时反向传播时可能造成梯度消失(因为sigmoid接近饱和区的时候,变化缓慢,导数趋近于0),并且它是指数运算,计算量较大。
tanh函数
Leaky ReLU
Leaky ReLU使得导数不总是为0,减少静默神经元的出现,实际应用中,Leaky ReLu并没有比ReLU有用很多。
参考资料:
https://blog.csdn.net/weixin_44478378/article/details/100858979?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2.pc_relevant_antiscanv2&utm_relevant_index=5
https://m.thepaper.cn/baijiahao_11444171