Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Página 1 de 13 INSTITUCIÓN: TECNOLÓGICO DE LA LAGUNA CARRERA: MECATRÓNICA MATERIA: INTELIGENCIA ARTIFICIAL DOCTOR: SERGIO LÓPEZ HERNÁNDEZ ALUMNO: RODRÍGUEZ GUERRA EDUARDO ANTONIO MATRICULA: 19131252 PRÁCTICA 6: PERROS Y GATOS FECHA DE ENTREGA: 04 DE DICIEMBRE DE 2023 de Página 2 de 13 La última práctica, justo cuando pensaba que ya le entendía muy bien y nada podría salir mal, que me encuentro que todo este tiempo estuve usando las librerías mas actualizadas, y como todas estaban en su última versión jamás me enfrente al problema de la incompatibilidad. Pero como los métodos vistos en los videos y en clase son de unas versiones antes, me vi en la necesidad de retroceder a fin de entender el funcionamiento de los comandos. Y fue una mala decisión jejeje, por buscar el camino fácil al instalar la librería de tensorflow o la de matploit terminaba actualizando otras que requería el programa, a esto adjunte que no toda la información de internet es real, que instalaba las versiones recomendadas de compatibilidad, pero que una de ellas no era cierta, Pero en fin las versiones usadas en esta práctica fueron: de Página 3 de 13 de Página 4 de 13 Comenzando con la red neuronal superficial, lo primero que hay que tomar encuentra es que poseía un dataset de 25000 imágenes, pero como no quería demorar tanto las pruebas decidí filtrarlo y reducirlo un poco. El imagedatagenerator nos permite procesas imágenes y tratarlas como si fuese simples arreglos, básicamente transformaremos el formato de la imagen en uno que la red neuronal pueda reconocer y procesar. Estos dos comandos van destinados a optimizar las imágenes, básicamente la primera capa de nuestra red neuronal estará recibiendo la información de cada pixel de la imagen, se imaginan cuantas entradas tendríamos que tener para ingresar una imagen común de 720x720, ahora a esto agréguenle los colores ya que la escala rgb usa tres canales, ósea realmente tendríamos un total de 720x720x2, valla que quedaría demasiado grande. Y por si fuese poco cada pixel varia de 0- 255, como lo vimos en las practicas pasadas al tener limites tan grandes la red neuronal, tardar más en entrenar además de que perderá asertividad, por eso mapeamos o normalizamos ese valor 0-1. Por todo esto le iremos poniendo cierto formato. Traemos las imágenes, ingresando la dirección de su ubicación, el formato de este comando es entrada, salida, tamaño de imagen, grupos, y modo de clasificación La entrada y la salida son la imagen y la categoría a la que corresponde, ahora bien como sabe la red cual es la categoría, pues toma como categoría las de Página 5 de 13 carpetas, por ejemplo si clasificáramos celulares tendríamos que acomodar el dataset en una carpeta y dentro de ella acomodar los celulares en cada carpeta, por ejemplo, una carpeta para motorola, otra para LG etc… el tamaño por lo antes mencionado, sabemos que tenemos que reducir la calidad de la imagen para asi ahorrar procesamiento, la verdad tome ese valor de 100 ya que en clase se comprobó que es el valor con menor perdida de información pero a la vez el que representa menor gasto computacional. El grupo, también en clase se comprobó que las redes neuronales presentan mejores resultados cuando se le someten en grupos las entradas. El modo de clasificación es binario por que el resultado esperado es perro o gato, en caso de ser uno diferente tendríamos que indicarlo aquí. Tuve la necesidad de intentar un modelo poderoso el cual fuese capaz de responder bien ante cualquier tipo de entrada, incluyendo aquellas con perturbaciones. Función de activación a la salida sigmoide por que el dato numérico es 0 o 1. Por último, en esta sección destacar el uso del flatten. La primera capa de esta red, tf.keras.layers.Flatten, transforma el formato de las imágenes de un arreglo bi-dimensional (de 28 por 28 pixeles) a un arreglo uni dimensional (de 28*28 pixeles = 784 pixeles). Y el numero 3 significa que le indicamos que esta en color, en caso de estar en escala de grises tendremos que colocar un 1. Preparamos el entrenamiento y configuramos los datos de entrenamiento. De hecho, en las primeras pruebas con un dataset de 300 imágenes termine con un asertividad de 80 en un numero de 150 épocas, pero apenas ponía una imagen diferente al resto y las respuestas perdían estabilidad. Entonces decidí mejorar el dataset, darle mas tiempo y una nueva capa oculta a fin de preservar ese asertividad y poder aplicarla a muchos más ejemplos. de Página 6 de 13 El 0.23 es el umbral recomendado. Vemos 35 ejemplos en pantalla usando la librería de matploit, y la predicción que nuestra red les dé a cada una. Con esta la arquitectura y las configuraciones plasmadas en las imágenes pasadas llegamos a un resultado de: Pero si tardo como media hora en entrenar, en colap hubiese sido mucho más rápido pero a costo de no aprender el paso a paso ya que las facilidades que me brindan. Obvio apenas vi ese porcentaje y guarde los resultados, pesos y la arquitectura. de Página 7 de 13 Ejemplo de resultados: Lo primero que me di cuenta es que hay gatos que los identifica como perros pero no perros identificados como gatos, entonces quizás necesite disminuir un poco el umbral. Con un umbral de 0.2 de Página 8 de 13 El resultado se mantiene igual de Página 9 de 13 Con umbral de 0.15 estos fueron los resultados: Solo dos errores, pero en defensa de la red uno de ellos es un gato blanco fotografiado con flash, ahí acepto mi responsabilidad de no haber depurado tan bien el dataset de pruebas. Vala para ser la red neuronal superficial, termine impresionado. de Página 10 de 13 A consejo del doctor decidí investigar alguna arquitectura convolucional, y después de intentar con varias, la que mejores resultados me arrojo fue la siguiente: De hecho, le tengo tanta confianza que la voy a entrenar solo 30 veces, si 10 épocas menos que la anterior. Recordando un poco…. una red neuronal convolucional es aquella capaz de extraer características de una imagen por medio de la aplicación y el procesamiento con diferentes filtros, en otras clases ya había aplicado diferentes filtros, pero si era algo engorroso analizar la imagen para ver que filtro le convenia más, saber que tengo una herramienta capaz de hacer ese proceso de manera automática es un alivio. Resultados: Podemos ver que hay demasiados gatos identificados como perros quizás necesite elevar más el umbral. Antes de modificar dicho parámetro: de Página 11 de 13 Sorprendentemente una red neuronal convolucional con un entrenamiento del solo 20% en comparación a la superficial, logro superarla, además destacar que el tiempo de demora fue como 8 minutos en contraste con la media hora. Prueba 2 Umbral de 0.25 Ahora si solo tenemos 2 errores en estas 33 muestras, pero veamos que sucede cuando lo subo a 0.3 de Página 12 de 13 Los errores siguen, ahora al 0,35 de Página 13 de 13 Solo un error con el 7% de margen de error por parte de la red neuronal creo que ese umbral es el necesario. Como conclusión me dejo la tarea de continuar investigando acerca de las redes neuronales convolucionales, así como logre desarrollar los principios para plantear arquitecturas para resolver problemas sencillos se que entrenando estas nuevas competencias seré capaz de resolver problemas más complejos, y aspirar a llevar esto más lejos, quizás automatización industrial y todo eso.
Compartir