3

Crea una red neuronal en 6 lineas

No, no es un truco, si se puede “Crear” red neuronal en 6 lineas de código. En realidad no la vamos a crear una red neuronal, vamos hacer fine-tuning de una manera rápida.

¿Que es fine-tuning?

Si no has visto los cursos de platzi, aquí lo definimos:


Fine-tuning es un proceso de entrenamiento de una red neuronal ya entrenada para adaptarla a un nuevo conjunto de datos. Esto se logra ajustando los pesos de la red neuronal existente en lugar de entrenar una nueva desde cero. El objetivo del fine-tuning es aprovechar el aprendizaje previo de la red neuronal en una tarea similar para mejorar su rendimiento en la nueva tarea. chatGTP


¿Lo hacemos con en keras?

Keras no es el único, framework de alto nive que existe para trabajar en Inteligencia Artificial.
En el mundo del Deep-Learning existe dos grandes framework TensorFlow y Pytorch. Son bajo nivel esto quiere decir que son el backend en el que se construye el deep learning.

Pytorch cada vez más popular
Dia tras dia, pytirch se vuekve un framework muy popular y usado por los desarrolladore.

Estas son alguna de las razones:

  • Un framework Pytonista: Si has trabajado en Numpy, te va hacer familiar crear cosas con Pytorch. Pytorch es muy
  • Solo en HugginFace un 85% de los modelos están escritos en Pytorch, en comparación con 8% de Tensorflow.
  • El esatado del arte se construye y los grandes modelos se construyen con Pytorch. Así que si quieres hacerle fine-tuning a estos modelos, debes aprender Pytorch

El ecosistema de Pytorch apenas se está construyendo, cada vez son más los nuevos frameworks y librerías que aparecen con Pytorch de backend. En esto Tensroflow es mucho mejor, pero no por tanto.

En la imagen anterios se observa el crecimiento Pytorch y el uso que le estamos dando. Es cierto que sigue siendo más popular Tensorflow, pero en la gráfica se observa como ese ecosistema empieza a disminuir. Lo que espero en el futuro es que los dos Frameworks se complemente con lo mejor de los dos.

Pero, ¿Cual es el keras de pytorch? En realidad no existe como tal una herramienta de Keras, para Pytorch. La intuición que hay Pytorch hace trabajar en algo similares, pero si existe herramientas de alto nivel que nos facilita a la hora de iterar y probar modelos pre-entrenado. Hoy te vengo a presentar Fastai (No confundir con Fastapi 😃).

Fastai, Deep learning para Coders

Así es como Jeremy Howard creador de fastai y que tambien fue fundador y presidente de kaggle, habla de lo que quiere y busca con fastai, raṕido en promagar, implementar y en correr. Es un frameowrk para ser utilizado por desarrolladores con un conocimiento básico de programación y aprendizaje automático, lo que facilita la integración con otras herramientas de desarrollo de software.

Veamos un ejemplo, para hacerle finetuing a una red neuronal.

Pasos para crear nuestra red neuronal en fastai

Vamos a crear un clasificador de plantas (Nunca fui tan bueno como mi madre 😦)

  1. Descarguemos el dataset, para este ejemplo, Voy a usar el siguiente dataset de Kaggle, el cual contiene, tre clases. Bougenville, Matahari, aglonema, Si alguien sabe que es Matahari, se lo agradecería.
    Cuando descargues el dataset, te va a salir las tres carpetas de test, train y valid, vamos a unir todo, solo separandolos por su clase. que nos quede lo siguiente
Dataset
|---- aglonema -> Todas las imagenes de aglonema
|---- matahari -> Todas las imagenes matahari
|---- boungenville -> Todas las imagenes de boungenville
  1. luego de tener nuestro dataset, pasemos al código.
from fastai.vision.all import *
path = Path("Dataset")
dls = DataBlock(
    blocks=(ImageBlock, CategoryBlock),
    get_items = get_image_files,
    splitter = RandomSplitter(valid_pct=0.2, seed=42),
    get_y = parent_label,
    item_tfms=Resize(192, method='squish'),
).dataloaders(path, bs=32)

dls.show_batch(nrows=3, ncols=3)
	
  • La primera línea importa todas las clases necesarias de fastai.vision.all. Esto incluye las clases y funciones necesarias para trabajar con imágenes y visión en fastai.

  • En la segunda línea se especifica la ruta donde se encuentra el conjunto de datos utilizando la clase Path de fastai. La variable “path” guarda la ruta al directorio donde se encuentra el dataset.

  • En la tercera línea se crea un objeto de DataBlock utilizando la clase DataBlock. Este objeto se encarga de especificar cómo deben ser organizados y procesados los datos. Los parámetros especificados dentro del bloque de construcción del objeto DataBlock son los siguientes:

    • blocks=(ImageBlock, CategoryBlock): Indica que la entrada será una imagen y la salida será una categoría.

    • get_items = get_image_files: Indica que se obtendrán todas las imágenes del directorio especificado en path.

    • splitter = RandomSplitter(valid_pct=0.2, seed=42): Indica que se dividirá el conjunto de datos en un conjunto de entrenamiento y un conjunto de validación, utilizando el 20% de los datos para validación. La semilla especificada garantiza que los datos se dividan de la misma manera cada vez que se ejecuta el código.

    • get_y = parent_label: Indica que la salida será la etiqueta de la categoría a la que pertenece la imagen.
      item_tfms = Resize(192, method=‘squish’): Indica que se redimensionará cada imagen para tener un ancho o alto de 192 pixeles, utilizando el método ‘squish’ que garantiza que la relación de aspecto se mantenga durante el redimensionamiento.

  • finalmente se llama a la funcion DataLoader con el path y el tamaño del batch (bs=32) para obtener un objeto DataLoader que se utilizará para procesar el conjunto de datos.

  • dls.show_batch(nrows=3, ncols=3) muestra un batch de 3x3 imágenes de forma aleatoria del conjunto de entrenamiento, con su respectiva etiqueta.

Output
output.png

  1. Es hora de entrenar 😃
learn = vision_learner(dls, resnet34, metrics=[accuracy, error_rate])
learn.fine_tune(3)
  • En la primera línea se crea un objeto “learn” utilizando la función vision_learner de fastai. Este objeto es un “Learner” especializado en visión, que se encarga de entrenar y evaluar modelos de redes neuronales para tareas de visión. Se le pasan como parametros el objeto DataLoader (dls) y el modelo base (resnet34)
    -El segundo parametro es una lista de metricas, en este caso se usa accuracy (precisión) y error_rate (tasa de error) para evaluar el modelo.
  • En la segunda línea, se llama al método fine_tune de learn, con un parametro de 3. Esto indica que se va a hacer un fine-tuning del modelo base resnet34, entrenando solo los últimos bloques de la red durante 3 epochs.

Tambien puedes usar cualquier red neuronal pre-entrenada que encuentres en la librería timm

Output
Screenshot from 2023-01-13 22-23-13.png

Graficamos la curvas de aprendizaje.

learn.recorder.plot_loss()
output2.png

Creamos la matriz de confusión y el reporte de clasificación:

from sklearn.metrics import classification_report, confusion_matrix
import seaborn as sns
print(classification_report(y, preds.argmax(dim=-1), target_names=dls.vocab))
con = confusion_matrix(y, preds.argmax(dim=-1))
sns.heatmap(con, annot=True, fmt='d', xticklabels=dls.vocab, yticklabels=dls.vocab)
output3.png
precisionrecallf1-scoresupportaglonema       0.88      1.00      0.94        15
 bougenville       1.00      0.92      0.96        24
    matahari       1.00      1.00      1.00        21

    accuracy                           0.97        60
   macroavg       0.96      0.97      0.96        60
weightedavg       0.97      0.97      0.97        60

En lo general, se tuvieron excelente métricas. Se puede ver un Accuracy del 97%. Viendo la matrix de confunsión, hay algunas imagenes de aglonema que se clasifican con boungenvillee (Ya hay que entra a detallarlas y a mejorar el modelo.

Fastai, no solo sirve para hacer clasificación de images, tambien segmentación, trabaja con NLP, datos tabulares y muchas más herramientas para poder probar e iterar rápido nuestros datos. Una invitación a ir a la documentación

Recuerda que para construir un buen sistema de inteligencia artificial es clave la rápida iteración en la creación de MVP, porque es así como conocemos, validamos el usario final y nuestro producto. Entre más feedback tenemos, más grande crecemos.

Conclusión

  • El creciemiento del ecosistema de Pytocrch que cada vez implemanta Pytorch para crear nuevos modelos fy frameworks como lo HugginFace, lo estén implementando, hace necesario aprenderlo.
  • Fastai, es un framework de alto nivel, que nos ayuda cada vez mas a probar y crear herramientas que estén en el estado del arte.

Sigueme en mis redes sociales
@FredyFrorozcol en Twitter
frorozcol en Linkedin.

Muchas gracias. !!