三、神经网络-激活函数

import numpy as np
import matplotlib.pyplot as plt

"""
激活函数是连接感知机和神经网络的桥梁,用于加入非线性因素,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。
"""


# 1.sigmoid函数实现
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

x=np.array([-5.0,5.0,0.1])
print(sigmoid(x))

#画出函数图像
x=np.arange(-5.0,5.0,0.1)
y=sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)#指定y轴的范围
plt.show()

#2.阶越函数
def step_function(x):
    return np.array(x>0,dtype=np.int)

x=np.arange(-5.0,5.0,0.1)#代表在-5.0到5.0范围,以0.1为单位,生成numpy数组([-5.0,-4.9,...,4.9])
y=step_function(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)#指定y轴的范围
plt.show()

 如上图所示,阶跃函数以0为界,输出从0切换为(或者从1切换为0)。它的值呈阶梯式变化,所以称为阶跃函数。

sigmoid函数和阶跃函数比较:

(1)sigmoid函数是一条平滑的曲线,输出随着输入发生连续的变化。而阶跃函数以0为界,输出发生急剧性的比变化。

(2)另一个不同的是:想比于阶跃函数只能返回0或1,而sigmoid可以返回连续的值。

(3)两者共同的性质:从宏观视角,两者具有相似的形状。当两者的结构输入较小时,输出接近0(为0);随着输入增大时,输出向1靠近(变为1)。也即:当输入信号为重要信息时,阶跃函数和sigmoid函数都会输出较大的值;当输入信号为不重要的信息时,两者都输出较小的值。

还有一个共同点,两者均为非线性函数,sigmoid是一条曲线,阶跃函数是一条像阶梯的曲线,两者都属于非线性的函数。

神经网络的激活函数必须使用非线性函数,如果不使用非线性函数,加深神经网络的层数就毫无意义了。线性函数的问题在于,不管如何加深层数,总是存在与之等效的“无隐藏层的神经网络”。

ReLU函数:

#3.ReLU函数;在输入大于0时,直接输出该值;在输入小于等于0时,输出0
def relu(x):
    return np.maximum(0,x)

print(relu(x))
x=np.maximum(0,x)
y=relu(x)
plt.plot(x,y)
plt.ylim(-1,6)#指定y轴的范围
plt.show()

 总结:常见的激活函数有:sigmoid函数、ReLU函数以及变种函数Leaky ReLU函数、Tanh函数等

而这几类函数又可以分为饱和激活函数非饱和激活函数。其中sigmoid函数和Tanh函数是饱和激活函数,ReLU函数及其变种函数属于不饱和激活函数。

不饱和函数主要有一下特点:

(1)不饱和激活函数可以解决梯度消失问题。

(2)不饱和激活函数可以加速收敛。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值