激活函数
激活函数必须为非线性函数,线性函数的问题在于,不管如何加深层数,等效于无隐藏层的神经网络。
例如: 线性函数h(x) = cx作为激活函数,
y(x) = h(h(h(x))) 三层神经网络,简化为y(x)=c_c_c*x,无法发挥多层网络带来的优势。
1)阶跃函数:
# coding: utf-8
import numpy as np
import matplotlib.pylab as plt
def step_function(x):
return np.array(x > 0, dtype=np.int)
X = np.arange(-5.0, 5.0, 0.1)
Y = step_function(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1) # 指定图中绘制的y轴的范围
plt.show()
图形如下
step_function 实现分解
>>> import numpy as np
>>> x = np.array([-1.0,1.0,2.0])
>>> x
array([-1., 1., 2.])
>>> y=x>0
>>> y
array([False, True, True])
>>> y=y.astype(np.int)
>>> y
array([0, 1, 1])
2)sigmoid函数:
sigmoid是一条平滑的曲线,输出随着输入的发生连续性的变化。而阶跃函数以0为界,输出发生剧烈变化。函数的平滑性对神经网络的学习具有重要意义。
另外一种不同,相对于阶跃函数只能返回0或1,sigmoid函数可以返回0.731…,0.880等实数。
sigmoid可以比作为水车,根据流过来的水量相应地调整传送出去的水量。
# coding: utf-8
import numpy as np
import matplotlib.pylab as plt
def sigmoid(x):
return 1 / (1 + np.exp(-x))
X = np.arange(-5.0, 5.0, 0.1)
Y = sigmoid(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1)
plt.show()
图形如下
3)Relu函数
# coding: utf-8
import numpy as np
import matplotlib.pylab as plt
def relu(x):
return np.maximum(0, x)
x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)
plt.plot(x, y)
plt.ylim(-1.0, 5.5)
plt.show()
图形如下
评论(0)
您还未登录,请登录后发表或查看评论