layer output 激活函数_激活函数与网络构建

1. 激活函数

在神经元中引入了激活函数,它的本质是向神经网络中引入非线性因素的,通过激活函数,神经网络就可以拟合各种曲线。如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,引入非线性函数作为激活函数,那输出不再是输入的线性组合,可以逼近任意函数。

1.1 Sigmoid/logistics函数

数学表达式为:

sigmoid 在定义域内处处可导,且两侧导数逐渐趋近于0。如果X的值很大或者很小的时候,那么函数的梯度(函数的斜率)会非常小,在反向传播的过程中,导致了向低层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。而且该激活函数并不是以0为中心的。在实践中这种激活函数一般只用于二分类的输出层。

# 导入相应的工具包

import tensorflow as tf

import tensorflow.keras as keras

import matplotlib.pyplot as plt

import numpy as np

# 定义x的取值范围

x = np.linspace(-10, 10, 100)

# 直接使用tensorflow实现

y = tf.nn.sigmoid(x)

# 绘图

plt.plot(x,y)

plt.grid()

1.2 tanh(双曲正切曲线)

数学表达式如下:

tanh也是一种非常常见的激活函数。与sigmoid相比,它是以原点(0, 0)为中心的,使得其收敛速度要比sigmoid快,减少迭代次数。然而,从图中可以看出,tanh两侧的导数也为0,同样会造成梯度消失。

若使用时可在隐藏层使用tanh函数,在输出层使用sigmoid函数。

# 导入相应的工具包

import tensorflow as tf

import tensorflow.keras as keras

import matplotlib.pyplot as plt

import numpy as np

# 定义x的取值范围

x = np.linspace(-10, 10, 100)

# 直接使用tensorflow实现

y = tf.nn.tanh(x)

# 绘图

plt.plot(x,y)

plt.grid()

1.3 RELU

数学表达式为:

ReLU是目前最常用的激活函数。 当x<0时,ReLU导数为0,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。然而,随着训练的推进,部分输入会落入小于0区域&#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值