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:
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 😦)
Dataset
|---- aglonema -> Todas las imagenes de aglonema
|---- matahari -> Todas las imagenes matahari
|---- boungenville -> Todas las imagenes de boungenville
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
learn = vision_learner(dls, resnet34, metrics=[accuracy, error_rate])
learn.fine_tune(3)
Tambien puedes usar cualquier red neuronal pre-entrenada que encuentres en la librería timm
Output
Graficamos la curvas de aprendizaje.
learn.recorder.plot_loss()
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)
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
Sigueme en mis redes sociales
@FredyFrorozcol en Twitter
frorozcol en Linkedin.
Muchas gracias. !!
https://platzi.com/blog/red-neuronal-artificial-que-es-y-como-se-entrena/