TFGUEX 2019 Costa Miguel
TFGUEX 2019 Costa Miguel
TFGUEX 2019 Costa Miguel
T RABAJO F IN DE G RADO
T RABAJO F IN DE G RADO
1. Introducción 1
1.1. Presentación de los capı́tulos . . . . . . . . . . . . . . . . . . . . . . 3
2. Objetivos 5
2.1. Objetivo Principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2. Objetivos Adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4. Metodologı́a 17
4.1. Datasets (Conjunto de datos) . . . . . . . . . . . . . . . . . . . . . . 18
4.1.1. Galaxias elı́pticas - Edge . . . . . . . . . . . . . . . . . . . . 21
4.1.2. Galaxias espirales - Spiral . . . . . . . . . . . . . . . . . . . 21
4.1.3. Galaxias lenticulares - Smooth . . . . . . . . . . . . . . . . . 22
4.1.4. Galaxias irregulares - Other . . . . . . . . . . . . . . . . . . 23
4.2. Herramientas Hardware . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3. Herramientas software . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.4. Redes Neuronales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.4.1. Como funciona una Red Neuronal y sus Pesos . . . . . . . . 30
4.4.2. Capas de una Red Neuronal . . . . . . . . . . . . . . . . . . 31
III
4.4.3. Tipos de Redes Neuronales . . . . . . . . . . . . . . . . . . . 33
4.4.4. Redes Neuronales con Keras . . . . . . . . . . . . . . . . . . 34
5. Implementación y desarrollo 35
5.1. Organización del trabajo . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2. Bloques del trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2.1. Aumento de la cantidad de imágenes usadas . . . . . . . . . . 40
5.2.2. Preparación de las imágenes para el entrenamiento . . . . . . 45
5.2.3. Creación del modelo . . . . . . . . . . . . . . . . . . . . . . 48
5.2.4. Compilación del modelo . . . . . . . . . . . . . . . . . . . . 55
5.2.5. Entrenamiento del modelo . . . . . . . . . . . . . . . . . . . 57
5.2.6. Resultados del entrenamiento . . . . . . . . . . . . . . . . . 59
6. Resultados 61
6.1. 1o Conjunto de Entrenamientos . . . . . . . . . . . . . . . . . . . . . 62
6.1.1. Dataset 1 - Muchas Imágenes con 4 clases de galaxias . . . . 66
6.1.2. Dataset 2 - Pocas Imágenes con 4 clases de galaxias . . . . . 69
6.1.3. Dataset 3 - Muchas Imágenes con 3 clases de galaxias . . . . 72
6.1.4. Dataset 4 - Pocas Imágenes con 3 clases de galaxias . . . . . 75
6.1.5. Realizando entrenamientos con diferentes Optimizadores . . . 79
6.2. 2o Conjunto de Entrenamientos . . . . . . . . . . . . . . . . . . . . . 84
6.3. Trabajando con los modelos obtenidos . . . . . . . . . . . . . . . . . 89
V
Índice de figuras
VII
5.10. Preparación Imágenes Para Entrenamiento . . . . . . . . . . . . . . . 45
5.11. Constructores del ImageDataGenerator . . . . . . . . . . . . . . . . . 46
5.12. Definición de los conjuntos de imágenes finales . . . . . . . . . . . . 47
5.13. Creación del Modelo . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.14. Capa de Convolución . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.15. Ejemplo de Filtros a Diferentes Niveles de Abstracción . . . . . . . . 50
5.16. Capa Conv2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.17. Ejemplo de Capa Densa . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.18. Ejemplo de Capa Densa en keras . . . . . . . . . . . . . . . . . . . . 51
5.19. Activación Lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.20. Activación Relu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.21. Ejemplo Matriz Max-Pooling . . . . . . . . . . . . . . . . . . . . . . 53
5.22. Ejemplo Max-Pooling . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.23. Ejemplo Max-Pooling en Keras . . . . . . . . . . . . . . . . . . . . . 53
5.24. Ejemplo Capa Flatten en Keras . . . . . . . . . . . . . . . . . . . . . 54
5.25. Ejemplo Capa Dropout en Keras . . . . . . . . . . . . . . . . . . . . 54
5.26. Compilación del Modelo . . . . . . . . . . . . . . . . . . . . . . . . 55
5.27. Fórmula accuracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.28. Ejemplo método compile en Keras . . . . . . . . . . . . . . . . . . . 56
5.29. Entrenamiento del Modelo . . . . . . . . . . . . . . . . . . . . . . . 57
5.30. Ejemplo Función Fit Generator en Keras . . . . . . . . . . . . . . . . 58
5.31. Ejemplo Función Evaluate Generator en Keras . . . . . . . . . . . . . 58
5.32. Resultados del entrenamiento . . . . . . . . . . . . . . . . . . . . . . 59
Introducción
Automatización
Conectividad
1
Información digital
La tecnologı́a avanza, y al igual que ella, las empresas deben hacerlo. Sin embargo,
muchas de ellas no están preparadas para estos cambios y tienen el riesgo de quedarse
desactualizadas.
En lo que a este proyecto afecta, una de las tecnologı́as que más estan favoreciendo
esta evolución es lo que llamamos Deep Learning. Es, en cierta manera, una parte
muy importante de lo que anteriormente hemos nombrado como uno de los campos
importantes en la llamada Industria 4.0 como es la Inteligencia Artificial.
Aunque la Inteligencia Artificial apareció sobre los años 50 con el fin de
automatizar las tareas intelectuales que normalmente realizan los humanos, no ha sido
hasta finales de la primera década del 2000 cuando ha empezado a despuntar gracias a
los grandes avances en la computación. Estos avances han permitido ejecutar procesos
en poco tiempo cuando anteriormente habrı́an tardado dı́as, semanas, meses o incluso
años. Fue entonces cuando nació el Deep Learing.
En la realización de este trabajo se ha hecho uso del Deep Learning con el fin
de clasificar imágenes de galaxias de manera automática. Se busca la realización
de entrenenamientos con la mayor precisión que esta herramienta nos pueda ofrecer
dentro de los conocimentos que se han ido adquiriendo en el desarrollo de este
proyecto. Esta clasificación se realizará según la morfologı́a de las diversas galaxias
que nos podemos encontrar en el espacio, apoyándonos en imágenes obtenidas a través
de satélites. Para ser más precisos, se ha hecho uso de la secuencia de Habble para
definir esta clasificación.
La secuencia del Hubble es un esquema de clasificación morfológica para
galaxias, inventado por Edwin Hubble en 1926. A menudo se le conoce coloquialmente
como el “diapasón de Hubble” debido a la forma en la que se representa
tradicionalmente. Aunque la secuencia de Habble está compuesta por tres tipos de
galaxias, para este trabajo en algunos entrenamientos, se ha incluido un nuevo tipo
definido como galaxias irregulares. Este tipo de galaxias no tienen una estructura
2
CAPÍTULO 1. INTRODUCCIÓN
regular obvia.
El conocimiento de una galaxia según su morfologı́a, permite a los astrónomos
conocer ya de antemano un conjunto de caracterı́sticas fı́sicas que están asociadas a un
tipo de galaxia en particular. También podrá agilizar la clasificación de un conjunto de
imágenes tomadas durante una jornada de trabajo evitando ası́ que el propio astrónomo
tenga que clasificarlas de forma manual.
Entrando más en detalle sobre el Deep Learing, este es un caso particular de redes
neuronales. Para este trabajo se hará uso de una red en particular que se denomina
redes neuronales convolucionales. Lo que se buscará más en detalle será la creación
de una red neuronal que mejor se adapte a la clasificación que se quiere desarrollar y
poder obtener los mejores resultados posibles.
En lo que se refiere a la implementación del proyecto, se ha centrado más en
el uso de una bibliotieca muy conocida en el mundo del Deep Learning como es
Keras. Es una biblbioteca de redes neuronales escrita en Python, muy sencilla y muy
recomendada para los que empiezan en este mundo del Deep Learning.
Durante esta documentación se entrará más en detalle, tanto de la tecnologı́a
con la que se ha desarrollado el proyecto, como con la información que nos
permitirá clasificar el conjunto de imágenes usadas.
En esta sección se hará una introducción de los capı́tulos que se han ido
desarrollando en esta documentación.
Estado del Arte. En este capı́tulo se describe más en detalle lo que es el Deep
Learning, de donde proviene, la evolución que ha ido desarrollando y lo que se
espera.
3
1.1. PRESENTACIÓN DE LOS CAPÍTULOS
4
Capı́tulo 2
Objetivos
En primer lugar hay que tener en cuenta que Deep Learning es una tecnologı́a cuya
principal motivación es la de facilitar la vida a las personas, facilitar el dı́a a dı́a. En mi
caso particular, el objetivo principal que se busca es que la propia máquina sea capaz
de clasificar imágenes con la mayor precisión posible. En concreto, que se le informe a
un usuario que tipo de galaxia es la que está observando en ese mismo instante, según
la clasificación morfológica de las galaxias. Facilitar el dı́a a dı́a de un astrónomo
mientras trabaja con un conjunto de imágenes de galaxias sin clasificar.
Este trabajo en particular serı́a de utilidad para astrónomos o gente que se dedica
directamente con temas de astronomı́a. También se podrı́a incluir a aquellos otros que
simplemente tienen la astronomı́a por afición.
5
2.2. OBJETIVOS ADICIONALES
Ver todas las funcionalidades que nos ofrece Deep Learning, ya que sirve para
mucho más que para la clasificación de imágenes.
6
Capı́tulo 3
Figura 3.1: Relación Inteligencia Artificial con el Deep Learning, Raul E. Lopez Briega
7
3.1. INTELIGENCIA ARTIFICIAL
8
CAPÍTULO 3. ESTADO DEL ARTE
Como dato interesante, el primero en pasar el Test de Turing fue Eugene Goostman
en el año 2014 pasando el test con un 33 %. Hizo uso de un chatbot desarrollado por
programadores que simularon la personalidad de un adolescente ucraniano.
La inteligencia artificial es una realidad presente en nuestras vidas que poco a poco
9
3.1. INTELIGENCIA ARTIFICIAL
10
CAPÍTULO 3. ESTADO DEL ARTE
11
3.2. MACHINE LEARNING
Seguridad en los datos: puede predecir que archivos son malware con gran
precisión.
Búsqueda online: Este quizás sea el uso más famoso del machine learning.
Google y sus competidores mejoran constantemente lo que entiende el motor
de búsqueda.
Estas son algunas de las aplicaciones en el dı́a a dı́a de las personas que hacen uso
del Machine Learning. Cada vez serán más sus aplicaciones y más complejas con el
fin de mejorar la vida de las personas.
12
CAPÍTULO 3. ESTADO DEL ARTE
Figura 3.3: Lı́nea del Tiempo Inteligencia Artificial Hasta el Deep Learning, Txema
Rodrı́guez
13
3.3. DEEP LEARNING
de “aprender” por sı́ mismo para efectuar una tarea a través de una fase previa de
entrenamiento. Trata de asemejar el aprendizaje que los humanos usan para obtener
el conocimiento especı́fico de una cosa o imagen. Es lo que actualmente se llama
como aprendizaje no supervisado. Aqui reside una de las grandes ventajas del Deep
Learning, no necesita la acción de ningún humano para aprender, esta tecnologı́a
aprende por sı́ sola.
Hoy en dı́a es una de las tecnologı́as más de moda ya que hace uso de estructuras
lógicas que se asemejan en mayor medida a la organización del sistema nervioso
de los mamı́feros. Estas tienen capas de unidades de proceso (neuronas artificiales)
que se especializan en detectar determinadas caracterı́sticas existentes en los objetos
percibidos. Se compone de unas redes de neuronas que son profundas con algoritmos
que son sumamente complejos con respecto a los usados en el Machine Learning.
Uno de los pioneros en el Deep Learing fue Geoffrey Hinton. En 2012, Hinton
y dos estudiantes demostraron que las redes de neuronas artificiales convolucionales
podı́an reconocer imágenes con mayor precisión que cualquier otra técnica basada en
inteligencia artificial. Después de una gran labor sobre este campo, Geoffrey Hinton
fue galardonado con el Premio Turing en 2018 junto con Yoshua Bengio y Yann LeCun
por su trabajo en Deep Learning.
Desde que en 2010 tuviera ese apogeo, ha logrado nada menos que una revolución
en el campo, con resultados notables en problemas de percepción como la vista y la
audición. Problemas que involucran habilidades que parecen naturales e intuitivas para
los humanos pero que durante mucho tiempo han sido difı́ciles de encontrar para las
máquinas.
14
CAPÍTULO 3. ESTADO DEL ARTE
15
3.3. DEEP LEARNING
16
Capı́tulo 4
Metodologı́a
17
4.1. DATASETS (CONJUNTO DE DATOS)
Redes Neuronales
18
CAPÍTULO 4. METODOLOGÍA
Como se puede observar, esta imagen contiene una gran cantidad de galaxias. Para
obtener una imagen de una galaxia en concreto, el zoom que hay sobre esta imagen es
enorme. Es por esto, por lo que en mi parecer, la resolución de las imágenes con las
que se va a trabajar no es la mejor, pero es bastante buena viendo su posible origen.
Este conjunto de imágenes han sido tratadas anteriormente de forma casi segura
para poder ser usadas en trabajos con Deep Learning, ya que, como comente
anteriormente, vienen correctamente etiquetadas y con un mismo tamaño en todas
ellas.
Para la clasificación morfológica de las imágenes se ha hecho uso de la secuencia
19
4.1. DATASETS (CONJUNTO DE DATOS)
Elı́pticas
Espirales
Lenticulares
Estas amplias clases pueden ser extendidas para permitir distinciones más finas de
apariencia. También podemos encontrar otros tipos de galaxias, tales como galaxias
irregulares, que no tienen una estructura regular obvia.
20
CAPÍTULO 4. METODOLOGÍA
21
4.1. DATASETS (CONJUNTO DE DATOS)
Es un tipo de galaxia intermedia entre una galaxia elı́ptica y una galaxia espiral que
en la Secuencia de Hubble se clasifica como “S0”. Las galaxias lenticulares consisten
en un brillante bulbo central rodeado por una estructura extendida, similar a un disco.
A diferencia de galaxias espirales, los discos de las galaxias lenticulares no tienen
estructura espiral visible. Han consumido o perdido gran parte o toda su materia
interestelar, como las galaxias elı́pticas, y por tanto carecen de brazos espirales[13].
Constituyen solo el 3 % de las galaxias observadas actualmente. Se identificarán con el
nombre de Smooth durante los entrenamientos. Un ejemplo de este tipo de galaxia es
el siguiente:
22
CAPÍTULO 4. METODOLOGÍA
23
4.2. HERRAMIENTAS HARDWARE
De todos los componentes descritos anteriormente, él más importante es esa GPU.
Como bien mencioné anteriormente, por una parte me ha facilitado mucho este trabajo
gracias a la rapidez con que se realizaban los entrenamientos con respecto al tiempo
empleado cuando se realizaba por CPU. Por otra parte, esos 4GB de memoria me
han supuesto un inconveniente en el momento de entrenar con ciertos modelos,
obligándome a modificar el tamaño de las imágenes, reduciendo su resolución casi a la
24
CAPÍTULO 4. METODOLOGÍA
mitad y, modificando el número de imágenes usadas por bloque (esto lo explicaré mas
adelante).
Un dato importante con respecto a las GPUs usadas para el Deep Learning es que
se recomienda que sea de la marca NVIDIA. Esta marca nos facilita una librerı́a para
trabajar con estas herramientas como es CUDA.
Anaconda
Anaconda es una Suite de código abierto que abarca una serie de aplicaciones,
librerı́as y conceptos diseñados para el desarrollo de la Ciencia de datos con Python.
Está orientada a simplificar el despliegue y administración de los paquetes de software.
Una vez instalado, nos ofrece la posibilidad, a través de su propia consola de
comandos, de crear nuestro propio entorno virtual donde poder instalar todas las
librerı́as necesarias con las que se va a trabajar.
Es más recomendable trabajar a través de un entorno virtual, ya que una instalación
en nativo puede desequilibrar los programas y configuraciones que tengamos en
nuestro equipo. De esta forma, podremos crear tantos entornos virtuales como
25
4.3. HERRAMIENTAS SOFTWARE
Pycharm
PyCharm es uno de los entornos de desarrollo más completos para Python. Es parte
de una suite de herramientas de programación ofrecidas por JetBrains. Este IDE me ha
facilitado el uso del entorno generado a través de Anaconda. Posteriormente, se han
26
CAPÍTULO 4. METODOLOGÍA
ido creando cada una de las clases usadas para poder realizar los entrenamientos y su
ejecución. Hace la función del tı́pico IDE que se usa para programar.
Python
Cuda
cuDNN
27
4.3. HERRAMIENTAS SOFTWARE
Keras
TensorFlow
28
CAPÍTULO 4. METODOLOGÍA
A continuación se mostrará una gráfica donde queda mucho mejor indicado donde
se encuentra cada una de estas tecnologı́as que se han definido anteriormente:
Otras Librerias
Otras de las librerı́as que han complementado este trabajo son las siguientes:
Numpy: es una extensión de Python, que le agrega mayor soporte para vectores
y matrices, constituyendo una biblioteca de funciones matemáticas de alto nivel
para operar con esos vectores o matrices.
shutil: este módulo ofrece una serie de operaciones de alto nivel en archivos y
colecciones de archivos. En particular, se proporcionan funciones que admiten
la copia y eliminación de archivos.
29
4.4. REDES NEURONALES
30
CAPÍTULO 4. METODOLOGÍA
31
4.4. REDES NEURONALES
Capa de entrada
Esta capa es la que contiene las entradas de nuestro sistema, recibe información del
exterior. Algunos las llaman capas expuestas o visibles. No es una capa que contenga
neuronas clásicas o pesos, simplemente las entradas de nuestro sistema que pasan a
través de la misma hacia la próxima capa.
Capas ocultas
Las capas ocultas, se llaman ası́ dado que no se puede entrar en contacto con
ellas directamente, sino que tiene que ser a través de la capa de entrada. Son las
encargadas de realizar el trabajo de la red. En un comienzo, los que en un principio
se llamaban perceptrones multicapa clásicos, contenı́an una o dos capas ocultas que
permitı́an desempeñar las tareas empleadas en ese momento. Pero a medida que han
avanzado los años se ha buscado más profundidad, es decir, mayor número de capas
ocultas y mayor número de neuronas, que supuso el inicio del Deep Learning.
Capa de salida
32
CAPÍTULO 4. METODOLOGÍA
Se van a distinguir dos tipo de Redes que se usan con Deep Learning:
Las Convets son un tipo de redes neuronales artificiales diseñadas para funcionar de
forma muy similar a las neuronas de la corteza visual primaria de un cerebro humano.
Estas han resultado ser ampliamente eficaces en tareas fundamentales de la visión
artificial, como la clasificación y la segmentación de imágenes.
Dichas redes están formadas por múltiples capas de filtros convolucionales de una
o más dimensiones, tras las cuales se insertan funciones no lineales de activación. Se
hará uso de diversos tipos de capas y optimizadores que se desarrollarán más adelante.
En el caso de una clasificación clásica mediante una red convolucional, es posible
encontrar dos fases bien delimitadas:
Una red neuronal recurrente no tiene una estructura de capas definida, sino que
permiten conexiones arbitrarias entre las neuronas, incluso pudiendo crear ciclos. Con
esto se consigue crear la temporalidad, permitiendo que la red tenga memoria.
Las principales caracteristicas de una RNN son:
33
4.4. REDES NEURONALES
Las redes neuronales recurrentes son muy potentes para todo lo que tiene que ver
con el análisis de secuencias, como puede ser el análisis de textos, sonido o video.
Existe multitud de tipos de redes neuronales recurrentes dependiendo del número
de capas ocultas y la forma de realizar la retropropagación, a continuación se detallarán
las más conocidas:
Redes LSTM
Redes GRU
34
Capı́tulo 5
Implementación y desarrollo
En este capı́tulo se expondrá todo el proceso de desarrollo con las diferentes partes
en que se ha dividido toda la implementación del trabajo.
Se informará de las diversas variables que se han usado para los diferentes
entrenamientos ejecutados, con el fin de obtener el mejor resultado posible en estos.
En primer lugar, se definirá como se ha organizado todo el trabajo. Posteriormente
se entrará más en detalle en cada una de las partes en las que se ha decidido dividirlo.
35
5.1. ORGANIZACIÓN DEL TRABAJO
Vı́ necesario realizar esta división porque veı́a que cada entrenamiento que querı́a
realizar se me hacı́a muy pesado el crearlo desde cero. Habı́a una pérdida de tiempo
notable en ordenar todo el entrenamiento de manera segura. También afectaba el
hecho de buscar y modificar aquellos parámetros que veı́a que podı́an mejorar el
entrenamiento, ya que, en algunos casos, cuando se modifica una variable, se tienen
que modificar otras forzosamente.
De esta manera tenı́a todos los parámetros más a mano. A parte, todos estos
parámetros son comunes y se puede usar para la mayorı́a de los casos donde se requiera
realizar un entrenamiento para la clasificación de imágenes.
Se explicará más en detalle cada una de estas partes en la siguiente sección.
Con respecto a los tipos de entrenamiento que se han realizado, se pueden dividir
en 2 grupos. El primer grupo son redes neuronales que he ido obteniendo de libros,
de cursos online o de algún artı́culo dedicado a la clasificación de imágenes con Deep
Learning. Finalmente, analizando los resultados de todos estos, se ha creado una red
neuronal de cero ,con el objetivo de poder sacar los mejores resultados posibles. Los
dos libros usados son muy buenos para aquellas personas que quieran iniciarse en el
mundo del Deep Learning [8][9]
El curso online usado está en la plataforma Udemy, especializada en cursos online.
Este curso es Deep Learning e Inteligencia artificial con Keras/Tensorflow.
Un segundo grupo son las redes neuronales ya creadas, que las podemos obtener a
través de la librerı́a applications de Keras.
36
CAPÍTULO 5. IMPLEMENTACIÓN Y DESARROLLO
Por cada red neuronal que se ha probado, a su vez, se han usado cuatro conjuntos
de datos o datasets distintos. Estos datasets son los siguientes:
IMÁGENES PARA ENTRENAMIENTO
37
5.1. ORGANIZACIÓN DEL TRABAJO
uno los tipos de galaxia. Tuve que hacer uso de una técnica usada en Deep Learning
para aumentar el número de imágenes y ası́ poder entrenar en igualdad de número de
imágenes para todos los tipos de galaxias. En este caso, todas las imágenes del tipo
Smooth son originales, llamando original las obtenidas desde un principio sin usar
técnica ninguna. Para igualar esta cantidad con respecto al resto de galaxias, hice uso
de la técnica Data Augmentation. Más adelante se explicará con mayor detalle. Esta
forma de hacer uso de esta técnica solo se da para este conjunto de entrenamiento.
En el conjunto usado para validación se ha empleado de forma equitativa el uso de la
ampliación de imágenes para los cuatro tipos de galaxias. De igual modo se ha hecho
para el conjunto de test.
El segundo dataset contiene solo fotos originales, no se ha hecho uso de la técnica
de aumento de imágenes. Se ha usado esta cantidad de imágenes porque es el máximo
que nos ofreció el conjunto de imágenes de tipo Edge. Se ha usado este dataset para
ver si con menos imágenes pero todas originales el resultado es mejor o peor que en el
caso anterior.
El tercer dataset contiene el mismo conjunto de imágenes que el primero pero
eliminando las que pertenecen a la clase Other.
El cuarto dataset contiene el mismo conjunto de imágenes que el tercero pero
eliminando las que pertenecen a la clase Other.
Estos dos últimos casos se han probado porque tenı́a la sensación de que al ser la
clase Other un tipo de galaxia con caracterı́sticas no definidas como son el resto de
tipos, la captura de propiedades comunes entre estas no iba a existir. Una red neuronal
siempre busca rasgos comunes entre ellos pero será difı́cil encontrarlos, ya que son
imágenes muy diferentes entre sı́.
Para cada una de las Redes Neuronales que se han probado, se han creado los
siguientes archivo de ejecución, cada uno de los cuales usará uno de los dataset
explicados anteriormente:
38
CAPÍTULO 5. IMPLEMENTACIÓN Y DESARROLLO
39
5.2. BLOQUES DEL TRABAJO
En esta sección se entrará más en detalle con los seis bloques que contiene un
archivo de entrenamiento. Se indicarán aquellos parámetros que han sido fijos o
modificados con respecto a las diferentes redes reuronales y los diversos datasets
usados.
Cada uno de estos bloques están definidos en una clase python diferente. Como se
observa en la siguiente imagen, se pueden ver las seis clases que representan a los seis
bloques que se definirán dentro de la carpeta Módulos.
Para que se puedan usar cada una de estas clases en los archivos de ejecución
principales se hará uso de las siguientes importaciones:
40
CAPÍTULO 5. IMPLEMENTACIÓN Y DESARROLLO
aumentar el tamaño de imágenes del conjunto de imágenes que se desee. Esta técnica
se llama Data Augmentation. Para el uso de esta técnica me apoyo en la libreria
Keras[16].
Por lo general, esta técnica sirve para aumentar el número de imágenes para la fase
de entrenamiento en caso de que tengamos un dataset flojo. En mi caso, lo uso para
poder igualar el número de imágenes de los diferentes tipos de galaxias y hacer un
entrenamiento con una mayor equidad de imágenes de todos los tipos. Para conseguir
esto lo que se hace es introducir perturbaciones en las nuevas imágenes obtenidas a
partir de una imagen original.
Para el archivo de ejecución esta parte se ha divido en tres. La que afecta al conjunto
de entrenamiento, la que afecta al conjunto de validación y la que afecta al conjunto de
test.
41
5.2. BLOQUES DEL TRABAJO
42
CAPÍTULO 5. IMPLEMENTACIÓN Y DESARROLLO
Para cada una de las tres partes vienen definidas las rutas donde se encuentra cada
conjunto de imágenes por cada uno de los tipos de galaxias, el número de copias por
imagen que se quiere realizar en cada tipo de galaxia y si se desea que durante la
ejecución se realice este aumento o no.
Como se puede observar en las imágenes, se hace uso del método
aumentarImagenes para realizar dicha acción. Método que se encuentra en la clase
AumentarImagenes.py.
Para realizar la técnica de Data Augmentation se hace uso de la librerı́a
ImageDataGenerator que la encontramos dentro de Keras. Se insertan las distintas
deformaciones que irán sufriendo la imágenes para ası́ poder obtener otra imagen que
parezca diferente a la original.
43
5.2. BLOQUES DEL TRABAJO
44
CAPÍTULO 5. IMPLEMENTACIÓN Y DESARROLLO
Los primeros parámetros usados para este bloque son las rutas donde se encuentran
las imágenes que se van a usar, tanto para el entrenamiento como para la validación y
para el test. Estos valores irán cambiando según se vayan usando los distintos datasets
comentados anteriormente.
Después se encuentrán los parámetros que afectan al tamaño de la imagen
indicando el número de filas y de columnas. En un principio, las imágenes usadas
tienen un tamaño de 300x300 pero hay algunas redes neuronales donde es imposible
usar ese tamaño. Si se trabajará en esos casos con estas dimensiones, se superarı́a
la cantidad de memoria libre que hay en la GPU y nos darı́a error. Este factor es
determinante ya que dificulta el obtener detalles que se podrı́an perder al cambiar la
resolución de las imágenes.
45
5.2. BLOQUES DEL TRABAJO
46
CAPÍTULO 5. IMPLEMENTACIÓN Y DESARROLLO
Una vez definidos los constructores, se hace uso del método flow from directory.
A este método se le pasa como parámetros de entrada la ruta del directorio donde estan
todas las imágenes para el entrenamiento o para la validación o para el test. También se
le pasa el tamaño que queremos tengan finalmente las imágenes, tanto la altura como la
anchura. El batch size que fue definido anteriormente para este bloque y la class mode
será siempre categorical. Este último parámetro determina el tipo de arrays de etiquetas
que se devuelven y es de tipo categorical porque es el que se usa para clasificaciones
en 2D como esta.
Es importante que, en el momento que se le indique la ruta donde se encuentran
todas las imágenes, dentro de esa carpeta haya otras carpetas con el nombre de cada
uno de los tipos que se quieran clasificar. Este nombre de las carpetas es el que se
usará para el arrays de las etiquetas, para ası́ poder diferenciar por cada imagen cuando
un resultado pertenece a un tipo de galaxia u otro. Dentro de estas carpetas es donde
estarán las imágenes de cada uno de los tipos a clasificar.
Como se oberva en la siguiente imagen, habrá tres generadores de lotes diferentes,
el de entrenamiento, validación y test.
47
5.2. BLOQUES DEL TRABAJO
En este bloque se indica que tipo de red neuronal se va a usar, que tipo de modelo
se va a crear. La clase usada para la formación de este bloque es creacionModelo.py.
Esta clase contiene todas las redes neuronales con las que se han hecho las pruebas de
clasificación.
A continuacion, muestro un ejemplo de esta sección en el archivo ejecutable:
Los atributos a indicar son el numClases que indica, en este caso, el número de
tipos de galaxias que vamos a diferenciar durante el entrenamiento. Como bien se
ha definido anteriormente, son los tipos de galaxias según su morfologı́a. En algunos
entrenamientos usaremos 4 tipos mientras que en otros solo 3, despreciando las
imágenes que son galaxias de tipo Other.
El atributo canales sirve para informar que las imágenes a procesar son en color
y no en blanco y negro, hay que hacer uso del RGB. Este atributo será siempre igual
para todos los entrenamientos ya que todas las imágenes son a color.
El atributo viewSummary sirve para mostrar el conjunto de capas que forman la
red neuronal junto con los parámetros que se usarán por cada capa. Cuando su valor
es 1 muestra esta información por consola y cuando su valor es 0 no se mostrará. Este
valor siempre será fijo para todos los entrenamientos ejecutados.
Por último tenemos el atributo modelType donde se informa del tipo de red
48
CAPÍTULO 5. IMPLEMENTACIÓN Y DESARROLLO
Capas convolucionales
Las capas convolucionales operan sobre los datos de entrada mediante el cálculo
de convoluciones discretas con bancos de filtros finitos.
49
5.2. BLOQUES DEL TRABAJO
50
CAPÍTULO 5. IMPLEMENTACIÓN Y DESARROLLO
Capas Densas
Este tipo de capas están representadas por las neuronas clásicas empleadas en los
ya conocidos perceptrones. Su función suele ser principalmente la de completar el
clasificador final, que será el encargado de pasar de mapas de caracterı́sticas a valores
concretos en función del objetivo de la red (clasificación o regresión).
Para esta capa se ha empleado la Dense. Un ejemplo de esta capa se puede ver en
la siguiente imagen.
Capas de Activación
Estas capas son las encargadas de aportar no linealidad a las funciones generadas
por las redes neuronales y de agregar las activaciones de múltiples capas en la salida
de la red.
Estas capas se aplican como atributo al resto de capas que forman la red neuronal.
Se puede observar en los diversos ejemplos introducidos en cada una de la capas que
se han explicado con el nombre de activation.
Las capas de activación usadas en las diferentes redes neuronales son las siguientes:
Lineal: La función lineal es bastante conocida por ser empleada en problemas de
regresión y se encuentran generalmente en la salida de la red. Un ejemplo:
51
5.2. BLOQUES DEL TRABAJO
52
CAPÍTULO 5. IMPLEMENTACIÓN Y DESARROLLO
Max-Pooling
El filtro max-pooling es una forma de reducción del volumen de salida de las capas
convolucionales de la CNN y que permite además incrementar el campo de percepción
de la red.
Ejemplo de matriz 4x4 en la cual se realiza un maxpooling de 2x2 con un stride de
2.
53
5.2. BLOQUES DEL TRABAJO
Flatten
Una capa flatten consigue llevar todas las dimensiones a una sola. Convierte nuestra
imagen en un array de valores. Pasamos de tensor 3D a tensor 1D.
Dropout
54
CAPÍTULO 5. IMPLEMENTACIÓN Y DESARROLLO
Adam
SGD
Adagrad
Con respecto a los optimizadores, encontramos una gran variedad de ellos a usar en
las redes convolucionales. Tanto el Adam como el Adagrad derivan del algoritmo de
descenso por gradiente estocástico SGD. En este algoritmo se seleccionan conjuntos
de entrenamiento de pequeño tamaño de forma aleatoria, también conocidos como
batchs. Estos son utilizados para realizar una iteración de descenso por gradiente para
minimizar la función de pérdidas del entrenamiento. El algoritmo SGD tiene como
principal parámetro a ajustar la magnitud del descenso o learning rate.
55
5.2. BLOQUES DEL TRABAJO
56
CAPÍTULO 5. IMPLEMENTACIÓN Y DESARROLLO
Los generadores de lotes que se usarán en este bloque serán los mismos que se
obtuvieron durante le ejecución del segundo bloque. Se usarán el de entrenamiento,
validación y test en este mismo bloque.
Se deberá indicar el número de épocas que desea se ejecute durante el
entrenamiento, es decir, el número de veces que las imágenes pasarán por la red
neuronal.
Los atributos steps indicarán el número de batchSize que se usarán por cada época.
Es decir, si tenemos un step en entrenamiento de 140 y un batch size de 40, el número
de imágenes que se procesarán en esa epoca será de 140*40. De esta forma se controla
el número de imágenes que deseamos se procese por época sin tener la necesidad de
procesar todas las imágenes que contenga el generador de lotes creado.
Por último, hay informar al atributo verbose. Este sirve para indicar, miestras se
esta realizando el entrenamiento, si se desea que se vaya mostrando la evolución de
este (valor 1) o simplemente informar al final de cada epoca (valor 2) o directamente
no informar (valor 0).
57
5.2. BLOQUES DEL TRABAJO
58
CAPÍTULO 5. IMPLEMENTACIÓN Y DESARROLLO
En primer lugar, mostrará un par de gráficas. Estas nos darán una relación de la
evolución de la Precisión por época y de las Pérdidas por época. Estas gráficas son
bastante buenas ya que se refleja perfectamente si una red no dará para más o si se
pueden obtener mejores resultados. Esta información la obtiene del atributo history,
siendo este atributo el resultado del método fit generator.
Tambien mostrará en consola los resultados de la etapa de test. El porcentaje de
acierto final y la pérdida.
El atributo nombreModelo informará del nombre que se quiere poner al modelo
generado tras el entrenamiento y que se guardará en la misma carpeta donde se
encuentra el ejecutable.
59
5.2. BLOQUES DEL TRABAJO
60
Capı́tulo 6
Resultados
Cada red neuronal tiene sus propias caracterı́sticas y lógicamente, los atributos
en algunos de estos casos no serán iguales. Pero hay otros atrı́butos donde siempre se
realizarán los entrenamientos con los mismos valores. A continuación, se expondrá una
tabla con estos atributos y sus respectivos valores:
Tabla 6.1: Parámetros comunes en los Entrenamientos para todas las Redes Neuronales
61
6.1. 1o CONJUNTO DE ENTRENAMIENTOS
Como se muestra en la imagen, esta red tiene una parte de clasificación y otra
de generación del modelo. La parte de clasificación es una combinación de capas
convolucionales Conv2D y MaxPooling. Estas capas van aumentado progresivamente
el número de neuronas con el fin de poder profundizar cada vez más en las imágenes a
entrenar y ası́ obtener mayor detalle de estas. Estas capas tienen una activación Relu.
En la parte de Generación del Modelo se comienza con una capa Flatten para
tratar mejor la información y se crean combinaciones de capas Dense y DropOut.
62
CAPÍTULO 6. RESULTADOS
63
6.1. 1o CONJUNTO DE ENTRENAMIENTOS
64
CAPÍTULO 6. RESULTADOS
En total, se hace uso de 1.916.931 parámetros, lo que resulta bastante poco para un
entrenamiento con imágenes. Se puede ver el número de parámetros usados por cada
capa.
Con respecto a los resultados obtenidos en los 4 conjuntos de entrenamientos que
se ha diferenciado, se han encontrado resultados bastantes diferentes y por lo general
no muy buenos. Se irán exponiendo uno a uno.
65
6.1. 1o CONJUNTO DE ENTRENAMIENTOS
66
CAPÍTULO 6. RESULTADOS
puede observar como esta ha ido subiendo a buen ritmo hasta las época 7. A partir
de ahı́, se ha mantenido en los mismos valores hasta el final. El resultado final es
un 73 % de precisión lo que no está nada mal. Con respecto a la validación, no ha
crecido tanto como la del entrenamiento, lo que significa que los resultados no son
nada buenos. Se ha mantenido oscilando entre los mismos valores durante las 20
épocas. Este entrenamiento destaca por su enorme sobreentrenamiento u overfiting.
Esto quiere decir que, este modelo sabe diferenciar muy bien las imágenes con las que
ha entrenado, pero si le dices que clasifique otras imágenes diferentes, el resultado es
mucho peor.
67
6.1. 1o CONJUNTO DE ENTRENAMIENTOS
Los resultados obtenidos en la fase de Test una vez hemos obtenido el modelo
entrenado son los siguientes:
68
CAPÍTULO 6. RESULTADOS
69
6.1. 1o CONJUNTO DE ENTRENAMIENTOS
70
CAPÍTULO 6. RESULTADOS
Los resutados obtenidos en la fase de Test una vez hemos obtenido el modelo
entrenado son los siguientes:
71
6.1. 1o CONJUNTO DE ENTRENAMIENTOS
72
CAPÍTULO 6. RESULTADOS
73
6.1. 1o CONJUNTO DE ENTRENAMIENTOS
Los resutados obtenidos en la fase de Test una vez hemos obtenido el modelo
entrenado son los siguientes:
74
CAPÍTULO 6. RESULTADOS
75
6.1. 1o CONJUNTO DE ENTRENAMIENTOS
76
CAPÍTULO 6. RESULTADOS
validación. Vemos como los valores han ido evolucionando de forma bastante pareja
durante el entrenamiento del modelo. Volvemos a tener los mejores valores obtenidos
en este caso de pérdidas, con valores bastantes bajos lo que es bastante positivo.
Los resutados obtenidos en la fase de Test, una vez hemos obtenido el modelo
entrenado, son los siguientes:
77
6.1. 1o CONJUNTO DE ENTRENAMIENTOS
que, las imágenes de tipo Other, estaban empeorando de forma considerable cualquier
entrenamiento que realizáramos.
La conclusión final que hemos obtenido de estos cuatro entrenamientos, realizados
todos ellos con una misma red neuronal, es que no siempre que se usen un mayor
número de imágenes, el resultado va a ser mejor. La técnica de Data Augmentation
no siempre es buena. Por otro lado, hay que analizar muy bien la clasificación que se
quiera realizar. Como hemos visto en este ejemplo, un tipo que no este bien definido,
es muy probable que la propia red no pueda sacar elementos en común de este tipo que
haga clasificarlos de forma correcta.
78
CAPÍTULO 6. RESULTADOS
Se van a mostrar las diferencias entre los distintos optimizadores usados. En los
entrenamientos mostrados anteriormente, el único optimizador usado es Adam. A
continuación, se mostrarán las diferencias con respecto a los optimizadores Adagrad y
SGD. Para estas pruebas se ha hecho uso del dataset con un menor número de imágenes
y con solo tres tipos de galaxias.
Este optimizador fue de los primeros en usarse en Deep Learning. La evolución del
entrenamiento con este optimizador ha sido la siguiente:
79
6.1. 1o CONJUNTO DE ENTRENAMIENTOS
La siguiente gráfica mostrará la evolución de las pérdidas del modelo en cada una
de las 20 épocas que duró este entrenamiento.
80
CAPÍTULO 6. RESULTADOS
Los resultados finales obtenidos una vez se ha ejecutado la fase de Test han sido
los siguientes:
Este optimizador se obtuvo a través del SGD. Se puede considerar una evolución
del SGD. El entrenamiento con este optimizador ha sido la siguiente:
81
6.1. 1o CONJUNTO DE ENTRENAMIENTOS
La siguiente gráfica mostrará la evolución de las pérdidas del modelo en cada una
de las 20 épocas que duró este entrenamiento.
82
CAPÍTULO 6. RESULTADOS
Los resultados finales obtenidos una vez se ha ejecutado la fase de Test han sido
los siguientes:
83
6.2. 2o CONJUNTO DE ENTRENAMIENTOS
Para esta sección, se van a presentar los entrenamientos que se han realizado ya
con redes neuronales hechas y de gran conocimiento en el mundo del Deep Learning.
Para ello se hará uso de nuevo de la biblioteca de Keras donde se nos facilita la carga
de estas redes de una forma sencilla a través de la librerı́a Applications.
Una vez tenemos el import con todas las redes neuronales que se van a usar se
procede a cargarlas. Como verán a continuación, el uso de estas redes es bastante
sencillo. Basta con llamar al método indicado en el import con la red que se desea
trabajar (en este caso es la VGG16). Para estas pruebas, solo se indicará el tamaño de
filas y columnas de las imágenes con las que se realizarán los entrenamientos. También
se indicará el número de canales que siempre será 3 al tratar con imágenes en color.
Por último, se indicará el número de clases en las que se hará la clasificación. El resto
de parámetros serán por defecto.
Como bien se ha podido ver en el import, las redes neuronales que se usarán serán
las siguientes:
1. VGG16
2. VGG19
3. Resnet 50
4. Inception V3
84
CAPÍTULO 6. RESULTADOS
5. Xception
6. Inception Resnet V2
Estas redes son bastante más complejas que las presentadas anteriormente y están
preparadas para resolver problemas mucho más complejos, aunque no siempre es la
mejor solución como veremos a continuación.
85
6.2. 2o CONJUNTO DE ENTRENAMIENTOS
Esta segunda tabla será los resultados de aquellos entrenamientos realizados con
una gran cantidad de imágenes por cada tipo de galaxia (unas 23.000 por cada tipo de
galaxia). La clasificación será con 3 tipos diferentes de galaxias eliminando la de tipo
OTHER.
Esta tercera tabla será los resultados de aquellos entrenamientos realizados con una
cantidad de imágenes bastante menor que las dos primeras. Habrá unas 2.000 imágenes
por cada tipo de galaxia. La clasificación será con 4 tipos diferentes.
Esta cuarta y última tabla será los resultados de aquellos entrenamientos realizados
con una cantidad de imágenes bastante menor que las dos primeras. Habrá unas 2.000
imágenes por cada tipo de galaxia. La clasificación será con 3 tipos diferentes de
galaxias eliminando la de tipo OTHER.
86
CAPÍTULO 6. RESULTADOS
Para estas conclusiones se van a tomar como referencia los resultados obtenidos
por la red neuronal que se ha hecho desde cero, expuesta en la sección anterior de este
capı́tulo.
Con respecto a los resultado finales, sin tener en cuenta el tiempo empleado, el resto
de redes (excluimos las VGG’s) tienen resultados bastante iguales en cada uno de los
diferentes entrenamientos realizados. Destaca, con los mejores resultados obtenidos,
la red Exception sobre el resto.
Por lo tanto, si hay que escoger una red para trabajar en este tipo de clasificaciones,
sin duda elegirı́a la Exception. Ya no solo por los resultados que son los mejores,
sino también por el tiempo empleado en estos entrenamientos. Se puede observar
claramente como estos tiempos son los más bajos en cada uno de los diferentes
entrenamiento.
87
6.2. 2o CONJUNTO DE ENTRENAMIENTOS
Si comparamos la red Exception con las creada desde cero en el primer conjunto
de entrenamientos que se expuso anteriormente, podemos ver como los resultados de
la red Exception son mı́nimamente mejores en todos los casos, pero también hay que
tener en cuenta el tiempo empleado. Este tiempo es bastante mayor en la red Exception
por lo que sin duda alguna me quedo con la red creada desde cero.
Escojo esta porque al final vamos a emplear menos tiempo para obtener casi los
mismos resultados que la Exception.
Un último detalle que querı́a remarcar y que me gustarı́a exponer es el resultado
de Red Inception Resnet V2 que se puede observar en la tercera tabla de resultados.
Como se puede ver, este resultado es bastante inferior a lo que nos suele dar esta
red y que podemos ver en el resto de entrenamiento. Este al final es un error que
se ha dado durante el entrenamiento que no he podido solucionar ni encontrar el
motivo exacto. Tengo la certeza de que puede ser por la memoria ocupada durante
la ejecución del entrenamiento anterior. Lo que ha hecho, de algun modo, es desvirtuar
este entrenamiento y no ha logrado realizar un entrenamiento limpio. Este error me
ha ocurrido bastante a lo largo de todo este trabajo, por lo que en ocasiones tenı́a que
ejecutar varias veces un mismo entrenamiento para cerciorarme de que ese resultado
era el máximo que me podı́a dar la red con la que estuviese trabajando.
En cierta medida, conseguı́ que este error se dejará de reproducir apagando el
equipo y haciendo que se liberará toda la memoria de la GPU al ser esta volátil. Pero,
como se ha podido comprobar, no siempre funcionó.
88
CAPÍTULO 6. RESULTADOS
89
6.3. TRABAJANDO CON LOS MODELOS OBTENIDOS
A partir de esta imagen se han obtenido los distintos filtros que se han creado en
las distintas capas usadas. Un ejemplo de estos filtros son los siguientes:
90
CAPÍTULO 6. RESULTADOS
A continuación, se les mostrará todos los filtros obtenidos de cada una de las capas
pertenecientes a la parte de Clasificación de nuestra Red Neuronal.
91
6.3. TRABAJANDO CON LOS MODELOS OBTENIDOS
92
CAPÍTULO 6. RESULTADOS
Conforme vamos a las capas mas profundas, se van obteniendo filtros con mayor
detalle, con mayor precisión. Es aquı́ de donde viene ese Deep (Profundo). Esta es la
gran diferencia del Deep Learning con el resto de técnicas actuales hoy en dı́a.
Otra de la pruebas que se ha hecho con el modelo obtenido, será la clasificación
de imágenes que nosotros elijamos y ası́ ver como clasifica entre los diferentes tipos
de galaxias. Se van a mostrar diversos resultados para que se vea que no siempre hay
que fiarse de los resultados obtenidos aunque, por lo general, la clasificación de estas
imágenes es bastante buena. Para hacer este trabajo se ha hecho uso del método predict
facilitado por la librerı́a de Keras. En primer lugar, se cargaba el modelo generado
anteriormente. Para ello se hace uso del método load, indicando la ruta donde se
encuentra este modelo.
93
6.3. TRABAJANDO CON LOS MODELOS OBTENIDOS
Una vez cargado el modelo, se van preparando las imágenes y se guardan todas en
un mismo array. Este array se le pasa al método predict indicado anteriormente.
94
CAPÍTULO 6. RESULTADOS
Para este ejemplo se ha usado una galaxia de tipo Espiral. Como se puede ver, el
resultado es bastante bueno ya que nos indica que esa galaxia es de tipo Espiral al
99.56 %, lo que es bastante precisa.
95
6.3. TRABAJANDO CON LOS MODELOS OBTENIDOS
Para este ejemplo se ha usado una galaxia de tipo Lenticular. Como se puede ver,
el resultado es bastante bueno ya que nos indica que esa galaxia es de tipo Lenticular
al 96.34 %, lo que es bastante preciso.
96
CAPÍTULO 6. RESULTADOS
Para este ejemplo se ha usado una galaxia de tipo Elı́ptica. Como se puede ver, el
resultado es bastante bueno ya que nos indica que esa galaxia es de tipo Elı́ptica al
99.9 %, lo que es bastante precisa y nos da bastantes garantı́as de que el resultado es el
correcto.
97
6.3. TRABAJANDO CON LOS MODELOS OBTENIDOS
Para este ejemplo se ha usado una galaxia de tipo Elı́ptica. Como se puede ver, el
resultado ya no es muy preciso ya que nos da solo un 50.54 % de probabilidad de que
esa imagen sea una galaxia de tipo Elı́ptica. En esta ocasión, el resultado final es bueno
pero puede darnos lugar a dudas.
98
CAPÍTULO 6. RESULTADOS
99
6.3. TRABAJANDO CON LOS MODELOS OBTENIDOS
porcentaje por el que se considera que la clasificación hecha por el modelo de una
determinada imagen es buena o no.
100
Capı́tulo 7
101
Hacer uso de callbacks. Aunque, por lo general, en la llamada al método fit() se
hace uso del callback History, me habrı́a gustado hacer uso de otras que me parecieron
bastante interesantes:
El uso de los pesos asignados a cada uno de los tipos de imágenes que se van a usar
para la realización el entrenamiento. Entiendo el comportamiento de los pesos, pero no
he sido capaz de asignar en código diferentes pesos a cada uno de los tipos de galaxias,
en relación a la cantidad de imágenes que tenı́a de cada uno de esos tipos.
Fuera del desarrollo del propio entrenamiento, desarrollar más el trabajo a partir de
la obtención del modelo de un entrenamiento. El poder desarrollar más aplicaciones
con el modelo resultante.
Por último, y es algo que me habrı́a encantando desarrollar para este TFG, es poder
desarrollar una aplicacion donde pueda usar el modelo resultante de un entrenamiento.
A partir de esta aplicación cualquier usuario habrı́a podido clasificar una o varias
imágenes a la vez, informando del tipo de galaxia a la que pertenece cada imagen
y ofreciendo al usuario el poder clasificar aquellas cuyo resultado es dudoso.
Bibliografı́a
[2] www.bbvaopenmind.com/tecnologia/inteligencia-artificial/
el-verdadero-padre-de-la-inteligencia-artificial/
[3] www.planetachatbot.com/midiendo-la-inteligencia-artificial-el-test-de-turing-5243d1d5ead2
[5] www.xataka.com/robotica-e-ia/inteligencia-artificial-reemplazara-40-trabajos-proximos-
15-anos-asegura-kai-fu-lee-pionero-ia
[6] https://www.powerdata.es/big-data
[7] F RAN Ç OIS C HOLLET,((Deep Learning with Python)), Manning, pág. 11.
[10] https://www.kaggle.com/laurenkwong/galaxydat
103
[15] F RAN Ç OIS C HOLLET,((Deep Learning with Python)), Manning
[16] https://keras.io/preprocessing/image/