Red de conocimiento informático - Material del sitio web - Cómo implementar una red neuronal usando python y scikit learn

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 de salida (cálculo de error):?Tj: valor verdadero, Qj representa el valor previsto

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'):

"""

: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))

'''

'''

#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>

nn.fit(X_train,labels_train,epochs=3000)

predicciones = ,]

y =

clf = BernoulliRBM( ). fit(X,y)

imprimir

Los resultados de la prueba son los siguientes: