Ya sabéis que obtuve el “Curso de Especialización en Inteligencia Artificial y Big Data” y, sabéis también, que de nuevo la formación recibida no fue una grata experiencia: profesores inactivos (alguno con prepotencia y malas maneras), temarios teóricos que no aportaban nada, exámenes tipo test y sin rastro de equipos y prácticas… Vamos, todo lo que uno desea cuando se apunta.
La única parte positiva fueron las actividades prácticas que había que entregar, que, aunque exigieran una investigación por nuestra parte gracias al temario existente, al menos nos daban algo de visión y conocimiento de lo que era y se podía hacer con la IA.
Y es que no había disculpa para que no se hubieran hecho unos exámenes eminentemente prácticos, que sería lo suyo, porque a pesar de que el Big Data y la IA consumen bastantes recursos, hay una manera de evitar este escollo: Google Colab.
Google Colab es un entorno de desarrollo que permite ejecutar Python en la nube, utilizando los recursos de la propia nube y liberando a tu equipo de sudar en estos tiempos de calor. Es lo que voy a usar para enseñarte una de las prácticas del curso y que veas un ejemplo típico de aprendizaje automático (no vamos a profundizar en el concepto, pero iré contándote lo que voy haciendo, que será suficiente).
Para este ejemplo vamos a usar TensorFlow, un popular marco de trabajo para el aprendizaje automático y el desarrollo de modelos de redes neuronales. Ahora, necesitamos los datos, y con esto quiero hacer un paréntesis que no por obvio deja de ser necesario:
“La inteligencia artificial se basa en gran medida en los datos”.
ChatGPT
Bueno, realmente me ha dicho más:
“La inteligencia artificial se basa en gran medida en los datos. Es a través de los datos que los algoritmos de aprendizaje automático y las redes neuronales pueden descubrir patrones, aprender y tomar decisiones. Cuantos más datos de calidad tengamos, más precisos y efectivos serán los modelos de inteligencia artificial”.
Y es lo que quiero destacar: sin datos, no hay nada. Hay que tener una cantidad de datos importante para que la IA pueda analizar los patrones y decidir. Esos datos, hay que etiquetarlos, categorizarlos para que el modelo sea mejor. Vamos, que detrás de todo “lo bonito” de la IA hay un trabajo bastante aburrido.
¿Cómo evitar ese tedioso trabajo? Pues para aprender, muy sencillo: usar conjuntos de datos ya existentes. Fin del paréntesis, volvamos a nuestro ejemplo:
Vamos a usar el conjunto de datos MNIST, que es un conjunto de imágenes de dígitos escritos a mano del 0 al 9. La idea de nuestro modelo es que pueda reconocer los dígitos escritos a mano habiendo aprendido de los datos que tenemos en el dataset.
Veamos la primera celda:
La ejecuto con el botón de play y veo que me descarga el dataset requerido. En las primeras líneas importo TensorFlow y una función que necesito para, básicamente, convertir las etiquetas en números, porque al final esto son matemáticas, y hay que trabajar con números.
En el resto de las líneas divido los datos en conjunto de entrenamiento y de prueba, las reformateo para que tengan la forma que quiero, normalizo los valores de los píxeles para que se normalicen entre 0 y 1, y uso esa función de la que hablé antes (to_categorical), que hace que cada etiqueta se convierta en un vector binario con un valor de 1 en la posición correspondiente a la clase y 0 en todas las demás posiciones.
Si te ha sonado a chino, date una vuelta por YouTube y documéntate, aquí te dejo un link de un canal bastante bueno al respecto: https://www.youtube.com/@DotCSV.
Vamos con la siguiente celda (ya ejecutada):
Lo que hago es, usando la biblioteca Matplotlib, mostrar las primeras 5 imágenes del conjunto de datos de prueba, con las características indicadas (escala de grises y tamaño de 28×28 píxeles). Me vale para ver qué tipo de datos estoy tratando y comprobar que la cosa va bien.
Siguiente paso: definir el modelo de la red neuronal. Le vamos a añadir capas, que son conjuntos de nodos o unidades interconectadas, también conocidas como neuronas artificiales o unidades de procesamiento (lo mismo, investiga un poco para este concepto). Dependiendo del tipo de problema al que nos enfrentemos, se usarán unas u otras.
Al final, le decimos que nos muestre un resumen del modelo definido:
Con el modelo definido, el siguiente paso es entrenarlo y evaluarlo (que aprenda y luego ver si ha aprendido). Configuramos el modelo de entrenamiento con determinados valores y lo entrenamos con fit, utilizando los datos de entrenamiento. Se especifica el tamaño del lote de entrenamiento en 32 y el número de epochs en 10 (número de veces que un algoritmo de entrenamiento recorre todo el conjunto de datos de entrenamiento durante el proceso de entrenamiento). Además, se proporcionan los datos de validación para evaluar el rendimiento del modelo en cada epoch. El historial del entrenamiento se guarda en la variable history.
Como puedes ver, se itera sobre la muestra las 10 veces que le hemos indicado. En cada iteración, nos da unos valores que dan información sobre el rendimiento del modelo. Fíjate en val_accuracy, que es la precisión alcanzada en el conjunto de datos de validación durante la epoch actual. Cada vez es más listo, ¿no?
Al final, hemos dicho que imprima el test_acc, que es donde hemos almacenado el valor del rendimiento final del modelo, que coincide con el val_accuracy del último epoch ya que se usan los datos de prueba para ambos. Ese resultado es la precisión del modelo en el conjunto de datos de prueba: 0.9783999919891357; el modelo ha aprendido con los datos de entrenamiento, luego se ha evaluado con los datos de prueba y de cada 100 casos, acierta casi 98. No parece malo 🙂
Te dejo el enlace al colab para que puedas hacer una copia y trastear. Pronto podrás colaborar con el resurgimiento de SKYNET y acabar con la humanidad, que viendo cómo están las cosas últimamente, no sería mala idea.
¡Hasta la semana que viene!