sábado, 11 de julio de 2020

Curso de Keras. Evaluar una red neuronal o modelo

Un modelo o red neuronal en aprendizaje automático es el proceso creado para analizar y extraer datos para obtener información. En las redes neuronales se componen de nodos o neuronas que actúan en capas para procesar datos.

El primer paso para crear una red neuronal es obtener un conjunto de datos. Es decir, una agrupación de datos relevantes para su uso en el modelo. Si se trata de un problema de regresión, generalmente son datos históricos. Si se trata de un problema de clasificación, se trata de colecciones de información similar.

Evaluar una red neuronal o modelo
Más imágenes como esta aquí


Una vez tenemos un conjunto de datos, debemos estructurarlo y limpiarlo. Este es el proceso para hacer que los datos sean utilizables por el modelo de aprendizaje automático. Dichos datos deben venir libres de errores y celdas vacías. Debe estar estructurado de manera que la máquina pueda diseminar puntos de datos separados. Los datos deben ser relevantes y se debe eliminar el ruido, así como los campos innecesarios. 

Este es el proceso previo a realizar sobre los datos antes de analizar dichos datos en la red neuronal para  pasarlos a través de las capas y producir una salida.

Antes de diseñar y configurar un modelo de aprendizaje profundo  se deben tomar muchas decisiones. Inicialmente, estas decisiones pueden tomarse arbitrariamente. Sin embargo, a medida que se disponga de evidencia empírica, el modelo debe evaluarse mediante ensayo y error hasta que se encuentre el mejor ajuste. Es de vital importancia contar con métodos y métricas para respaldar la evaluación del rendimiento del modelo. La mayoría de las evaluaciones se realizarán ejecutando un modelo con diferentes parámetros. Dependiendo de la carga de datos, esto podría ser una serie de pruebas cortas contra conjuntos de datos pequeños, con la intención de encontrar los resultados más precisos.

Deep Learning a menudo maneja conjuntos de datos muy grandes, por lo que aún podríamos consumir mucho tiempo y desperdiciar recursos. Para reducir el tiempo involucrado, se  emplea la división de datos. Es típico dividir los datos en conjuntos de datos de capacitación y prueba.

Keras brinda la capacidad de evaluar una red neuronal de Deep Learning mediante el uso de un conjunto de datos de verificación automática. Esto tiene la capacidad de, con el simple cambio de un parámetro llamado validation_split, designar un porcentaje del conjunto de datos de entrenamiento únicamente con fines de validación o evaluación.

Este parámetro debe ser un número entero, que representa un porcentaje, Por ejemplo 0.2 representa el 20% del conjunto de la entrada de datos.

Si el conjunto de datos es pequeño o el analista no desea dividirlo, se puede invocar un conjunto de datos manual para que actúe como validación durante el entrenamiento.  También existe la posibilidad de usar una validación cruzada k-fold. Que proporciona una estimación del rendimiento de un modelo basado en datos no vistos. Este último divide el conjunto de datos de entrenamiento en subconjuntos. Y luego entrena modelos en todos los subconjuntos, excepto uno, que se lleva a cabo de forma independiente. El proceso se repite hasta que todos los subconjuntos se hayan separado de la iteración de la capacitación. El rendimiento se promedia en todos los modelos creados.
Este proceso es muy costoso desde el punto de vista computacional, pero proporciona los mejores resultados.  A continuación vamos a cargar algunas bibliotecas para poder hacer un ejemplo. Cargamos la biblioteca secuencial, la biblioteca Dense, y ponemos  make_regression,  MinMaxScaler y la matriz de importación. 

#Para ver la versión actual de tensorflow:
!pip install -–upgrade tensorflow

from tensorflow.keras.layers import Dense
from sklearn.datasets import make_regression
from sklearn.preprocessing import MinMaxScaler
from numpy import array
from tensorflow.keras.models import Sequential

Con estas bibliotecas importadas, podemos crear nuestro conjunto de datos, una red neuronal secuencial,  que después compilaremos. 

Especificamos el número de muestras, características, el ruido, el estado. Y después  cargamos nuestros escalares con MinMaxScaler, 

X, y = make_regression(n_samples = 1000, n_features = 2, noise= 0.2, random_state = 1)
scalarX, scalarY = MinMaxScaler(), MinMaxScaler()
scalarX.fit(X)
scalarY.fit(y.reshape(1000,1))
X = scalarX.transform(X)
y = scalarY.transform(y.reshape(1000,1))

Aquí solo estamos creando información sobre el conjunto de datos. Después añadimos  model = Sequential  y después agregamos tres capas con cuatro unidades en la entrada, una en la capa oculta y otra en la capa de salida. Finalmente compilamos el modelo para 50 épocas con verbose = 1

#creamos el modelo, en este caso secuencial de tres capas
model=Sequential()
model.add(Dense(4,input_dim=2,activation='relu'))
model.add(Dense(4,activation='relu'))
model.add(Dense(1,activation='linear'))
model.compile(loss='mse',optimizer='sgd')
model.fit(X,y,epochs=50,verbose=1)

Al ejecutar las líneas de arriba, a la derecha de la barra de progreso  se puede ver el tiempo que la máquina tardó en calcular cada época. Y el valor de la función de pérdida, por lo que podemos ver si las opciones del optimizador son eficientes. 

Compilar una red neuronal o modelo


Observando estos valores. Podemos determinar si el tipo de activación es el correcto y si el número de épocas especificadas debe reducirse o aumentarse.

Creamos un conjunto de datos de predicción y un rango de impresión. 

#Creamos el dataset de Predicción
xpred, a = make_regression(n_samples = 3, n_features= 2, noise=0.1, random_state = 1)
xpred = scalarX.transform(xpred)
ypred = model.predict(xpred)

#imprimimos los resultados comparados con la predicción
for i in range(len(xpred)):
  print("X=%s, Predicted = %s" % (xpred[i], ypred[i]))

Evaluando una red neuronal o modelo

xpred, viene de los resultados de la primera línea. Y es la predicción y le pasamos xpred como argumento. La salida muestra los rangos de retorno reales de los datos y los resultados pronosticados. Esto ayuda a evaluar el rendimiento del modelo y a determinar la precisión de los resultados.

Haciendo predicciones

Aquí hay una API front-end que se ejecuta sobre un back-end de bajo nivel para crear redes neuronales artificiales utilizadas en el aprendizaje profundo. Y el aprendizaje profundo es parte del aprendizaje automático basado en emular el cerebro imitando la actividad de las neuronas. El software aprende a reconocer patrones y sonidos, imágenes y texto. Lo hace ejecutando cálculos a través de múltiples capas y cada una difunde una parte de los datos, terminado con algunos de estos datos como salida.

Los resultados de aprendizaje profundo se han utilizado para clasificar imágenes en grupos. Los clips de audio se pueden traducir a diferentes idiomas y se pueden hacer predicciones sobre el clima o el número de ventas esperado o incluso la probabilidad de que un cáncer sea benigno o maligno.

Una vez creado, limpiado y estructurado un conjunto de datos para su uso, se pueden crear las capas en un modelo y luego ajustarlas para su entrenamiento. Una vez ha sido entrenada, se pueden incluir nuevos datos en el modelo para su prueba. La prueba consiste en hacer una predicción sobre una hipótesis, y utilizar el aprendizaje profundo para predecir un resultado.

Antes de poder hacer una predicción, el modelo final debe ser entrenado. Esto significa que el modelo ha sido diseñado, compilado y evaluado para su ajuste. Cuando se han investigado todas las vías respecto a la evaluación del modelo y se ha buscado un  ajuste más preciso, se entrena el modelo final y se realiza la predicción.

Hay dos tipos de predicciones de clasificación: de clase y de probabilidad.

Una predicción de clase determina en qué grupo pertenece un objeto. Esto consiste en categorizar imágenes, por ejemplo, decir si una foto es de un gato, o de un perro. Una predicción de probabilidad devuelve una entre cero y uno. Este número es la probabilidad de que el elemento de datos esté en una clase, por lo que cero representa un 0% y 1 un 100%. Si se aplica a un conjunto de datos que contiene imágenes de un perro, entonces la predicción sería el porcentaje de probabilidad de que la imagen contenga un perro.

Las predicciones de regresión pueden predecir cantidades o probabilidades. Se pueden predecir cantidades, como la cantidad de ventas esperadas en un día según el clima.

No hay comentarios:

Publicar un comentario