Función de activación
La función de activación debe ser una función no lineal, el problema con la función lineal es que por muy profunda que sea el número de capas, es equivalente a una red neuronal sin capas ocultas.
Por ejemplo: función lineal h (x) = cx como función de activación,
y (x) = h (h (h (x))) red neuronal de tres capas, simplificada ay (x) = c c c * x, incapaz de jugar mucho Las ventajas que aporta la capa de red.
1) Función de paso:
# 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()
Los gráficos son los siguientes
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) función sigmoidea:
sigmoidea es una curva suave y la salida cambia continuamente con la entrada. La función de paso está limitada por 0 y la salida cambia drásticamente. La fluidez de la función es de gran importancia para el aprendizaje de las redes neuronales.
Otra diferencia es que la función de paso solo puede devolver 0 o 1, mientras que la función sigmoidea puede devolver números reales como 0,731 ..., 0,880.
Sigmoid se puede comparar con una rueda hidráulica, que ajusta la cantidad de agua enviada de acuerdo con la cantidad de agua que fluye.
# 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()
El gráfico es el siguiente
3) Función 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()
Los gráficos son los siguientes