Minería de datos Introducción serie de tutoriales (ocho) de la utilización de una red neuronal (basado pybrain) de escritura a mano digital de reconocimiento conjunto MNIST

Minería de datos Introducción serie de tutoriales (ocho) de la utilización de una red neuronal (basado pybrain) de escritura a mano digital de reconocimiento conjunto MNIST

En esta sección, no tendrá la red neuronal se introducen, por lo que si usted no entiende la red neuronal, se recomienda encarecidamente a ver un "libro de la sandía", o vistazo a mi blog anterior: Minería de datos Introducción serie de tutoriales (siete e) introducción de las redes neuronales

Inicialmente estaba destinado a seguir "entrada de datos de Python y la práctica minera" dentro de la etapa de utilizar redes neuronales para identificar el código, pero entonces, un código de verificación a su propia generación, y entonces pensé por un momento, no un famoso MNIST conjuntos de datos hacer, por qué no usarlo, no huele?

MNIST (Mezclado Instituto Nacional de Estándares y la base de datos Tecnología) Creo que, básicamente, lo entendemos, la mayoría de los requisitos previos de aprendizaje automático es él. Es un muy grande escrito a mano digital de conjunto de datos ( web oficial ). Que contiene los números escritos a mano 0 a 9. Parte de los datos como sigue:

conjunto de datos se divide en dos partes, entrenamiento y prueba. Y luego se divide en dos archivos, archivos de datos e imágenes etiquetas de archivo en un conjunto diferente. En un conjunto de datos tiene 60.000 de datos de datos de prueba y de capacitación 10.000. Tamaño de la imagen es de 28 * 28.

Descargar conjunto de datos

Todo comienza con el conjunto de datos, aunque el sitio web oficial ofrece conjuntos de datos para nosotros para descargar, pero sklearn proporciona una manera más conveniente para nosotros para descargar conjuntos de datos. Código es el siguiente:

import numpy as np
from sklearn.datasets import fetch_openml
# X为image数据,y为标签
X, y = fetch_openml('mnist_784', version=1, return_X_y=True)

Donde x, y medio contiene tanto el conjunto de entrenamiento también contiene un conjunto de prueba. Es decir X o Y, 70.000 piezas de datos. ¿Qué datos es?

En X, cada uno de datos es una longitud \ (28 \ times 28 = 784 \) de matriz, la matriz de datos es un valor de píxel de la imagen. Cada dato y es una etiqueta, en nombre de esta imagen la que una representación digital (de 0-9).

A continuación, binariza los datos, el mayor valor de píxel que 0 se establece en 1, y los datos guardados en la carpeta:

X[X > 0 ] = 1
np.save("./Data/dataset",X)
np.save("./Data/class",y)

A continuación, en la carpeta de datos no han sido dos de los siguientes documentos:

Nuestros datos tomados en el medio de un conjunto de datos, y luego transferidos a 28 * 28 formato, de la siguiente manera:

Los conjuntos de datos pueden utilizar el método anterior para obtener, puede también de mi Github descarga anterior (que conjunto de datos conjunto de datos debido a GitHub límite de tamaño de archivo de modo se comprime, tiene que ser capaz de utilizar la descompresión).

conjuntos de datos de carga

Los pasos anteriores se descarga un conjunto de datos bueno, ya que ahora podemos cargar los datos.

import numpy as np
X = np.load("./Data/dataset.npy")
y = np.load("./Data/class.npy")

X es un conjunto de datos extraídos son los siguientes:

En una de datos y se extrae, como sigue:

Todo era perfecto, pero hay un problema en la red neuronal, la capa de salida es en realidad este:

No es el resultado de una salida directa, pero la salida \ (y1, ..., y_j, ..., y_l \) resultado (en el MNIST \ (L = 10 \) , debido a que sólo 10 tipos de números). 5 en el ejemplo anterior, la capa de salida no es sólo una salida digital simple, pero a la salida 10 valores. Entonces, ¿cómo será la salida de 5 se convierte en una salida 10 figuras? Aquí se utiliza "una codificación caliente".

Una codificación-caliente, también conocido como una codificación eficiente, utilizado principalmente \ (N \) bits en el registro de estado a \ (N \) estados que codifican, cada estado por otro bit de registro independiente, y en cualquier cuando sólo uno válido.

En los siguientes datos, por ejemplo, cada fila representa un registro y cada columna representa una propiedad. La primera de las dos propiedades necesitan código de sólo tres estados, porque sólo 0,1,2 tres atributos. Por lo que podemos utilizar en nombre de 100 representantes 0,010 1,001 representantes 2.

A continuación, los datos después de la codificación de los datos se ve? La figura siguiente:

Ahora se puede cargar anverso de la etiqueta conjunto de datos \ (y \) sea "una codificación caliente".

Código es el siguiente:

from sklearn.preprocessing import OneHotEncoder
# False代表不生成稀疏矩阵
onehot = OneHotEncoder(sparse = False)
# 首先将y转成行长为7000,列长为1的矩阵,然后再进行转化。
y = onehot.fit_transform(y.reshape(y.shape[0],1))

Se siguió mediante la reducción de los datos recogidos. Los conjuntos de entrenamiento y prueba de corte conjunto de datos.

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(X,y,random_state=14)

En una red neuronal, utilizamos pybrain marco para construir una red neuronal. Pero entonces, para la biblioteca pybrain, que era diferente, que quiere usar su propio formato de conjunto de datos, por lo que necesitamos para convertir sus datos en un formato prescrito.

from pybrain.datasets import SupervisedDataSet

train_data = SupervisedDataSet(x_train.shape[1],y.shape[1])
test_data = SupervisedDataSet(x_test.shape[1],y.shape[1])

for i in range(x_train.shape[0]):
    train_data.addSample(x_train[i],y_train[i])
for i in range(x_test.shape[0]):
    test_data.addSample(x_test[i],y_test[i])

Por último, el conjunto de datos se carga hasta el final aquí. Entonces podemos empezar a construir una red neuronal.

Construir redes neuronales

En primer lugar, creamos una red neural, que contiene sólo la capa de entrada y la capa de salida y una capa oculta.

from pybrain.tools.shortcuts import buildNetwork
# X.shape[1]代表属性的个数,100代表隐层中神经元的个数,y.shape[1]代表输出
net = buildNetwork(X.shape[1],100, y.shape[1], bias=True)

Aquí que tiene las siguientes funciones "sesgo" de. En nombre de sesgo es una neurona sesgo, sesgo = TRUE en nombre de la activación de sesgo neurona, es decir, cada capa con esto las neuronas. Sesgo de neuronas en la siguiente figura, de hecho, que es el valor umbral, que es sólo otra manera.

Ahora que hemos construido una red neuronal relativamente simple, entonces estamos utilizando el algoritmo BP para obtener el valor de peso adecuado.

Back-propagación (BP) algoritmo

Los pasos específicos del algoritmo en un blog de se ha introducido, es una suerte que BP algoritmo proporciona una biblioteca para el uso en el pybrain medio. Aquí directamente en el código. Utilice más detalles sobre BackpropTrainer puede ver el sitio web oficial

from pybrain.supervised.trainers import BackpropTrainer
trainer = BackpropTrainer(net, train_data, learningrate=0.01,weightdecay=0.01)

Y hay varios parámetros que se describen bajo una ligera:

  • net: Redes Neuronales

  • train_data: conjunto de datos de entrenamiento

  • learningrate: tasa, que está por debajo del aprendizaje \ (\ ETA \) , también es posible utilizar lrdecay este parámetro para controlar la velocidad de desintegración, específica fue a ver el documento oficial sitio web de la misma.

    \ [\ Begin {equation} \ begin {array} {l} \ Delta w_ {hj} = \ eta g_ {j} b_ {h} \\ \ Delta \ theta_ {j} = - \ g_ eta {j} \ \ \ Delta v_ {ih} = \ e_ eta {h} x_ {i} \\ \ Delta \ gamma_ {h} = - \ eta e_ {h} \\ \ end {array} \ end {equation} \]

  • weightdecay: atenuación de peso, el peso está por debajo de atenuación \ (\ lambda \)

    \ [\ Begin {equation} E = \ lambda \ frac {1} {m} \ sum_ {k = 1} ^ {m} E_ {k} + (1- \ lambda) \ sum_ {i} w_ {i} ^ {2} \\ \ lambda \ in (0,1) \ end {equation} \]

Entonces podemos empezar a tren.

trainer.trainEpochs(epochs=100)

epochsEs decir, está capacitado atravesado el número de conjunto de entrenamiento.

Entonces descarga está esperando el tiempo. Espere a que el campo de entrenamiento completó excel. Tamaño del tiempo de entrenamiento con el conjunto de entrenamiento, el número de neuronas de la capa oculta, el rendimiento del PC, por lo que el número de pasos relacionados.

Recuerda Recuerda, esta vez el programa no se ejecutará en el equipo de Estudiante en la parte superior de la nube Ali, o utilizar sus propias máquinas funcionan. Aunque la nueva versión pequeña actuación PRO13 i5 de Lenovo puede ser, pero aún así corrió un siglo durante tanto tiempo, hey (perdido mi tiempo en el juego).

predecir

A través de los pasos anteriores y después de esperar durante algún tiempo, hemos completado el modelo de formación. A continuación, podemos utilizar las predicciones de prueba.

predictions = trainer.testOnClassData(dataset=test_data)

predictionsLos datos parciales, que representan los resultados de la prueba de conjunto predicho:

Entonces podemos empezar a verificar la exactitud de, y aquí seguirá utilizando la evaluación de F1. Esto ha sido introducido en la parte delantera, ya no introducido.

verificación de F1

Hay una necesidad de prestar atención, porque antes de que y_testse utilizaron los datos one-hot encodingse codifica, por lo que necesitamos en primer lugar one-hota su vez codifican en forma normal.

# 取每一行最大值的索引。
y_test_arry = y_test.argmax(axis =1)

Los resultados específicos son los siguientes:

A continuación, F1el valor para la verificación.

from sklearn.metrics import f1_score
print("F-score: {0:.2f}".format(f1_score(predictions,y_test_arry,average='micro')))

A continuación, los siguientes resultados:

Los resultados sólo pueden decir muy bien, no es particularmente mala, pero no es especialmente buena.

resumen

Proyecto Dirección: Github . Mientras que la exactitud de arriba no es ye, solamente \ (86 \% \) , pero está bien, después de todo, es utilizar una capa de capas ocultas y la capa oculta, a sólo 100 neuronas.

Si el rendimiento del equipo no es suficiente, pero el número apropiado de pasos y reducir el tamaño del conjunto de entrenamiento, y el número de neuronas de la capa oculta.

referencia

Supongo que te gusta

Origin www.cnblogs.com/xiaohuiduan/p/12635624.html
Recomendado
Clasificación