Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Página 1 de 6 INSTITUCIÓN: TECNOLÓGICO DE LA LAGUNA CARRERA: MECATRÓNICA MATERIA: INTELIGENCIA ARTIFICIAL DOCENTE: SERGIO LÓPEZ HERNÁNDEZ ALUMNO: RODRÍGUEZ GUERRA EDUARDO ANTONIO MATRICULA: 19131252 TAREA 3: COMPUERTAS LOGICAS CON RED NEURONAL FECHA DE ENTREGA: 13 DE NOVIEMBRE DE 2023 Página 2 de 6 Dentro de la presente practica el doctor nos solicitó elaborar redes neuronales, capaces de aprender e implementar las tablas de verdad de la AND OR y XOR, a fin de comprender como funciona una red neuronal. En si esto es gracias al aprendizaje profundo, aquel que le permite a la red evolucionar época tras época, en un principio teniendo las entradas y salidas de un proceso, sin conocerlo, además de la arquitectura que poseerá nuestra red neuronal, la primera época el sistema aleatoriamente asignará pesos a cada neurona, y en función del error presente en las salidas, ira modificando dicho valor. En mi caso decidí hacer una sola red neuronal capaz de reconocer cualquiera de las tres tablas de verdad, para solamente dos entradas. Tensorflow la use porque es la librería de cajón, aquella que me permita darle la estructura deseada a mi red neuronal, además de poder entrenarla y probarla tantas veces como lo requiera. Numpy, me sirve para ingresar entradas y salidas en forma de arreglos de forma simpe. Matplotlib la implemente a fin de ver gráficamente el error presente generación tras generación. Antes de pasar al siguiente paso dejo adjuntas las tablas de verdad que requerí para la practica TABLA DE AND TABLA DE OR TABLA DE XOR 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1 0 Página 3 de 6 Entonces se me ocurrió, y si a la red neuronal le ingreso otro parámetro aparte de las dos salidas de las compuertas, para así escoger cual tabla de verdad usar. Dando como resultado el siguiente formato XYZ, X-> selecciono que tabla de verdad usar y con YZ asigno las entradas de la tabla de verdad. Al final el formato queda asi: 1 0 0 -> 0 OR 1 0 1 -> 1 1 1 0 -> 1 1 1 1 -> 1 2 0 0 -> 0 XOR 2 0 1 -> 1 2 1 0 -> 1 2 1 1 -> 0 3 0 0 -> 0 AND 3 0 1 -> 0 3 1 0 -> 0 3 1 1 -> 1 Ya ingreso entradas y salidas. Ahora si viene lo mejor…… elaborar la arquitectura: Para ser honestos, esta arquitectura es resultado de moverle mucho la verdad, tomando como punto Página 4 de 6 Primero intente una red neuronal de dos capas y 5 neuronas cada capa, la cual funcionaba con dos de las 3 compuertas, XOR era la más difícil, entonces en primera instancia mejore la arquitectura agregando más capaz, y neuronas, pero no fue hasta que asigne que función de activación a cada capa, que los resultados empezaron a mejorar, relu la seleccione porque es la más efectiva, ya que le brinda mayores oportunidades de resolver problemas no lineales y tangente hiperbólica, me agrado porque permite salidas negativas y positivas. Lo que ayuda a que no este presente el problema de las neuronas muertas. Después puse solo un elemento a la salida ya que la salida es 1 o 0. Ya que los entrenamientos no demoran mucho, me pareció correcto mejorar la efectividad de la respuesta minimizando los saltos entre valores. Para el entrenamiento quise dejar visible el progreso de este, y el numero de 130 épocas fue por que en la mayoría de los entrenamientos a los que lo sometí la magnitud de perdida se minimizaba antes o poco después del 100 Página 5 de 6 Fragmento para graficar la tabla anterior Ya por último puse en práctica la red neuronal para determinar su eficacia, comprobé cada posible entrada y todas y cada una de ellas brindaron el resultado deseado, como no recordaba cómo poner el filtro para pasar de un término decimal a una de las 2 soluciones posibles, usé if. Para guardar la estructura implemente el guardado por h5. Y listo, la verdad consideró que la estructura pudo haber quedado mucho más compacta, ya conociendo como seleccionar las funciones de activación que yo deseo para cada capa. Pero el resultado fue tan justo que no le moví. Conclusiones: Aun que no lo parezca esta práctica fue muy difícil de desarrollar ya que primero tuve que crear un ambiente con Python 3.10 para usar tensorflow sin problemas, ya que en Python 3.11 se puso mas exigente y solicita mejores características computacionales. Ahora relacionado con la arquitectura, agregar capaz ocultas y funciones de activación en mi red permite brindarle más y mejores herramientas para solucionar los problemas que le someta. Por ejemplo, antes de agregar funciones de activación la red me daba muchos buenos resultados, Página 6 de 6 pero aquellos que no eran tan lineales como la or exclusiva termino tronando, y errando en los pronósticos, entonces al agregarle funciones de activación fue más fácil sacarlo adelante. Ya por último hacer incapie en que este problema en términos generales, es sumamente sencillo de resolver ya que la mayoría de manejadores viene por default, pero va abriendo los ojos hacia que problemas puede ir orientado. Problemas tan complejos de programar que sea más fácil entrenar una red para resolverlos.
Compartir