Cómo implementar una red neuronal usando python y scikit learn
1: Introducción al algoritmo de redes neuronales
2: Introducción detallada al algoritmo de retropropagación
3: Ejemplos de ecuaciones de transformación no lineal
4 : Yo mismo Implementando el algoritmo de red neuronal NeuralNetwork
5: Ejemplo de XOR basado en NeuralNetwork
6: Ejemplo de reconocimiento de dígitos escritos a mano basado en NeuralNetwork
7: Uso de BernoulliRBM en scikit-learn Ejemplo
8: Ejemplo de reconocimiento de dígitos escritos a mano en scikit-learn
1: Introducción al algoritmo de redes neuronales
1: Antecedentes
Con Inspirado en la red neuronal del cerebro humano, han aparecido muchas versiones en la historia, pero la más famosa es la retropropagación
2: Red neuronal de alimentación hacia adelante multicapa
Componentes de múltiples -Red neuronal directa de capa
Capa de entrada, capa oculta, capa de salida
Cada capa se compone de unidades
La capa de entrada se pasa desde la característica de instancia vector del conjunto de entrenamiento
Se pasa a la siguiente capa a través del peso del nodo de conexión, y la salida de una capa es La entrada de la siguiente capa
El número de las capas ocultas son arbitrarias, solo hay una capa de salida y una capa de entrada
Cada unidad (unidad) también puede denominarse nodo neuronal según la definición de fuente biológica
Lo anterior. La imagen se llama red neuronal de 2 capas (la capa de entrada no se cuenta)
La suma ponderada en una capa luego se transforma en la salida de acuerdo con la ecuación no lineal
As. En teoría, si hay suficientes capas ocultas y un conjunto de entrenamiento lo suficientemente grande para una red neuronal directa de múltiples capas, se puede simular cualquier ecuación
3: diseñar la estructura de la red neuronal
3.1 Antes de utilizar los datos de entrenamiento de la red neuronal, debe determinar la cantidad de capas de la red neuronal y la cantidad de unidades en cada capa
3.2 Cuando el vector de características se pasa a la capa de entrada, generalmente es el primero normalizado y entre 0 y 1 (para fortalecer el proceso de aprendizaje)
3.3 Las variables discretas se pueden codificar en posibles valores asignados a cada unidad de entrada correspondiente a una característica
Para ejemplo: el valor de la característica A puede tomar tres valores (a0, a1, a2) y se pueden usar tres unidades de entrada para representar A
Si A = a0, entonces el valor de la unidad que representa a0 tomará 1. Otros toman 0
Si A=a1, entonces el valor unitario que representa a1 toma 1, otros toman 0, y así sucesivamente
3.4 La red neuronal se puede usar para clasificación (clasificación ) problema, también puede resolver el problema de regresión
3.4.1 Para problemas de clasificación, si son 2 categorías, se puede representar mediante una unidad de entrada (0 y 1 representan 2 categorías respectivamente)
Si hay más de dos categorías, cada categoría está representada por una unidad de salida
Entonces, ¿el número de unidades en la capa de entrada suele ser igual al número de categorías?
3.4.2 No existe una regla clara para diseñar cuántas capas ocultas son mejores
3.4.2.1 Experimentar y mejorar en función de pruebas experimentales, errores y precisión
4: Algoritmo verificación - método de validación cruzada
Interpretación: Hay un conjunto de conjuntos de entrada A y B, que se pueden dividir en tres grupos. Por primera vez, el primer grupo se utiliza como. el conjunto de entrenamiento para encontrar una precisión, y por segunda vez, el segundo grupo se usa como conjunto de entrenamiento, encuentre una precisión, encuentre la precisión, use el tercer grupo como conjunto de entrenamiento por tercera vez, encuentre una precisión. y luego promediar las tres precisiones
Dos: Algoritmo de retropropagación Introducción detallada
1: Instancias de proceso en el conjunto de entrenamiento a través de iteración
2: Número de entradas a la capa de entrada
La primera capa de datos se obtiene mediante el cálculo del peso del primer piso.
Los datos se utilizan como entrada de la segunda capa y el resultado se obtiene nuevamente mediante el cálculo del peso. Hay un error entre el resultado y el valor real y luego, según el error, el peso entre cada dos conexiones se actualiza. dirección inversa
3: Introducción detallada al algoritmo
Entrada: D: conjunto de datos, | tasa de aprendizaje, una red neuronal directa multicapa
Salida: una red neuronal entrenada (una red neuronal entrenada)
3.1 Pesos y sesgos de inicialización: inicialización aleatoria entre -1 y 1, o entre -0,5 y 0,5, cada unidad tiene un sesgo
3.2 Para cada instancia de entrenamiento, los datos A se calculan y se convierten en la entrada de la siguiente capa a través de la función f. La función f es:
3.2.2: Transmisión inversa basada en error
Para la capa oculta (cálculo de error):? Errk representa el error de la capa anterior, Wjk representa el peso de la conexión entre la capa anterior y el punto actual
Actualización de peso:? l: se refiere a la tasa de aprendizaje (tasa de cambio), especificada manualmente, el método de optimización es disminuir gradualmente con la iteración de los datos
Actualización de sesgo:? l: Igual que arriba
3.3: Condición de terminación
3.3.1 La actualización del peso es inferior a un cierto umbral
3.3.2 La tasa de error de predicción es inferior a un determinado umbral
3.3.3 Alcanzar un determinado número de ciclos preestablecido
4: Explica el algoritmo con ejemplos
El par 0.9 usa L, la tasa de aprendizaje
El código de prueba es el siguiente:
1.Código de archivo NeutralNetwork.py
#codificación: utf-8
importar numpy como np
#Definir funciones hiperbólicas y sus derivadas
def tanh(x):
devolver np .tanh(x)
def tanh_deriv(x):
retorno 1.0 - np.tanh(x)**2
def logistic(x):
retorno 1/(1 + np.exp(- x))
def logistic_derivative(x):
retorno logístico(x)*(1- logistic(x))
#Definir algoritmo de red neuronal NeuralNetwork
clase NeuralNetwork:
#Inicialización, las capas representan una lista, por ejemplo, representa 10 neuronas en la primera capa, 10 neuronas en la segunda capa y 3 neuronas en la tercera capa Neuron
def __init__(self, Layers, enable='tanh'):
""" p>
:param capas: una lista que contiene el número de unidades en cada capa.
Debe haber al menos dos valores
:param activación: la función de activación que se utilizará Puede ser
"logístico" o " tanh"
"""
si activación == 'logístico':
self. .activación = logística
self.activation_deriv = logística_derivada
activación elif == 'tanh':
self.activation = tanh
self.activation_deriv = tanh_deriv
self.weights = , 'tanh')
X = np.array(]:
print(i,nn.predict(i))
''' p>
'''
#Ejemplo de reconocimiento de dígitos escrito a mano basado en NeuralNetwork
importar numpy como np
desde sklearn.datasets importar load_digits
desde sklearn.metrics importe confusion_matrix,classification_report
desde sklearn.preprocessing importe LabelBinarizer
desde sklearn.cross_validation importe train_test_split
desde NeuralNetwork importe NeuralNetwork
dígitos = load_digits()
X = dígitos.datos
y = dígitos.target
X -= X.min()
X /= X.max()
nn =NeuralNetwork(,'logistic')
X_train, X_test, y_train, y_test = train_test_split(X, y)
labels_train = LabelBinarizer().fit_transform(y_train)
labels_test = LabelBinarizer().fit_transform(y_test)
imprimir "empezar a ajustar" p> p>
nn.fit(X_train,labels_train,epochs=3000)
predicciones = ,]
y =
clf = BernoulliRBM( ). fit(X,y)
imprimir
Los resultados de la prueba son los siguientes: