神经网络"/>
三、神经网络
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)不饱和激活函数可以加速收敛。
更多推荐
三、神经网络
发布评论