CNTK - Creación de la primera red neuronal

Este capítulo desarrollará la creación de una red neuronal en CNTK.

Construye la estructura de la red

Con el fin de aplicar los conceptos de CNTK para construir nuestro primer NN, vamos a usar NN para clasificar las especies de flores de iris en función de las propiedades físicas del ancho y largo del sépalo, y del ancho y largo del pétalo. El conjunto de datos que utilizaremos el conjunto de datos de iris que describe las propiedades físicas de diferentes variedades de flores de iris:

  • Longitud del sépalo
  • Ancho del sépalo
  • Longitud del pétalo
  • Ancho del pétalo
  • Clase ie iris setosa o iris versicolor o iris virginica

Aquí, crearemos una NN regular llamada NN de avance. Veamos los pasos de implementación para construir la estructura de NN -

Step 1 - Primero, importaremos los componentes necesarios como nuestros tipos de capa, funciones de activación y una función que nos permita definir una variable de entrada para nuestro NN, desde la biblioteca CNTK.

from cntk import default_options, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import log_softmax, relu

Step 2- Después de eso, crearemos nuestro modelo usando la función secuencial. Una vez creado, lo alimentaremos con las capas que queramos. Aquí, vamos a crear dos capas distintas en nuestro NN; uno con cuatro neuronas y otro con tres neuronas.

model = Sequential([Dense(4, activation=relu), Dense(3, activation=log_sogtmax)])

Step 3- Por último, para compilar el NN, vincularemos la red a la variable de entrada. Tiene una capa de entrada con cuatro neuronas y una capa de salida con tres neuronas.

feature= input_variable(4)
z = model(feature)

Aplicar una función de activación

Hay muchas funciones de activación para elegir y elegir la función de activación correcta definitivamente marcará una gran diferencia en el rendimiento de nuestro modelo de aprendizaje profundo.

En la capa de salida

Elegir un activation La función en la capa de salida dependerá del tipo de problema que vamos a resolver con nuestro modelo.

  • Para un problema de regresión, deberíamos usar un linear activation function en la capa de salida.

  • Para un problema de clasificación binaria, deberíamos usar un sigmoid activation function en la capa de salida.

  • Para problemas de clasificación de clases múltiples, deberíamos usar un softmax activation function en la capa de salida.

  • Aquí, vamos a construir un modelo para predecir una de las tres clases. Significa que necesitamos usarsoftmax activation function en la capa de salida.

En la capa oculta

Elegir un activation La función en la capa oculta requiere algo de experimentación para monitorear el rendimiento y ver qué función de activación funciona bien.

  • En un problema de clasificación, necesitamos predecir la probabilidad de que una muestra pertenezca a una clase específica. Por eso necesitamos unactivation functioneso nos da valores probabilísticos. Para alcanzar este objetivo,sigmoid activation function puede ayudarnos.

  • Uno de los principales problemas asociados con la función sigmoidea es el problema del gradiente de desaparición. Para superar ese problema, podemos utilizarReLU activation function que convierte todos los valores negativos a cero y funciona como un filtro de paso para valores positivos.

Elegir una función de pérdida

Una vez que tenemos la estructura para nuestro modelo NN, debemos optimizarlo. Para optimizar necesitamos unloss function. diferente aactivation functions, tenemos menos funciones de pérdida para elegir. Sin embargo, la elección de una función de pérdida dependerá del tipo de problema que vamos a resolver con nuestro modelo.

Por ejemplo, en un problema de clasificación, deberíamos usar una función de pérdida que pueda medir la diferencia entre una clase predicha y una clase real.

función de pérdida

Para el problema de clasificación, vamos a resolver con nuestro modelo NN, categorical cross entropyLa función de pérdida es la mejor candidata. En CNTK, se implementa comocross_entropy_with_softmax que se puede importar desde cntk.losses paquete, de la siguiente manera

label= input_variable(3)
loss = cross_entropy_with_softmax(z, label)

Métrica

Con tener la estructura para nuestro modelo NN y una función de pérdida para aplicar, tenemos todos los ingredientes para comenzar a hacer la receta para optimizar nuestro modelo de aprendizaje profundo. Pero, antes de profundizar en esto, deberíamos aprender sobre las métricas.

cntk.metrics

CNTK tiene el paquete llamado cntk.metricsdesde donde podemos importar las métricas que vamos a utilizar. Mientras construimos un modelo de clasificación, usaremosclassification_error matriz que producirá un número entre 0 y 1. El número entre 0 y 1 indica el porcentaje de muestras predichas correctamente -

Primero, necesitamos importar la métrica de cntk.metrics paquete -

from cntk.metrics import classification_error
error_rate = classification_error(z, label)

La función anterior realmente necesita la salida del NN y la etiqueta esperada como entrada.