Está en la página 1de 137

Deep Learning aplicado a imágenes

satelitales como herramienta de


detección de Viviendas Sin Servicio
de energı́a en el caserı́o Media
Luna-Uribia-Guajira

Lalita Sakhi Valdés Ávila


Joher Mauricio Baquero Vanegas

Universidad Distrital Francisco José de Caldas


Facultad de ingenierı́a
Bogotá, Colombia
2019
Deep Learning aplicado a imágenes
satelitales como herramienta de
detección de Viviendas Sin Servicio
de energı́a en el caserı́o Media
Luna-Uribia-Guajira

Lalita Sakhi Valdés Ávila


Joher Mauricio Baquero Vanegas

Tesis presentada como requisito para optar al tı́tulo de:


Ingeniero de Sistemas

Director:
Ing. Oswaldo Alberto Romero Villalobos, M. Sc.

Universidad Distrital Francisco José de Caldas


Facultad de ingenierı́a
Bogotá, Colombia
2019
iii

AGRADECIMIENTOS

”Quiero agradecer a mi familia por su esfuerzo y comprensión en hacer de mi una mejor


persona, a mi compañero sentimental por su confianza, inspiración y apoyo, a mis maestros
por las bases formativas que me dieron y principalmente me agradezco a mı́ misma, ya que
todo este proceso solo fue posible gracias a la voluntad y esfuerzo personal”.

Lalita Sakhi Valdés Ávila

”Quiero agradecer a todos mis familiares que fueron un apoyo fundamental durante este
largo camino de esfuerzo, crecimiento y aprendizaje, a la institución por mi formación y
con ella a todos aquellos docentes que dejaron su huella en mi persona. Agradezco su
paciencia y esfuerzo, adicionalmente a mi compañera quien fue la persona que un dı́a soñó
con esto, permitiendo con su trabajo y dedicación que fuera posible”.

Joher Mauricio Baquero Vanegas


iv

Glosario

API:
˙ Es un conjunto de funciones y procedimientos que cumplen una o muchas funciones
con el fin de ser utilizadas por otro software. Sus siglas vienen del inglés Application Pro-
gramming Interface o en español Interfaz de Programación de Aplicaciones.
Asociación:
˙ Relación que se establece entre dos patrones.
Clase:
˙ Son los grupos o conjuntos de patrones que representan un mismo tipo de concepto.
Modelo:
˙ Representación abstracta, conceptual, gráfica (o visual), fı́sica o matemática, de fenóme-
nos, sistemas o procesos a fin de analizarlos, describirlos, explicarlos, simularlos y predecirlos.
Patrones:
˙ Son representaciones abstractas de un objeto en el mundo fı́sico; los patrones exhiben
cierta regularidad en una colección de observaciones conectadas en el tiempo, en el espacio
o en ambas, y pueden servir como modelo.
Pı́xel:
˙ Elemento discreto de una imagen digital, cuyo valor indica la intensidad del color o del
nivel de gris de la imagen en ese punto.
Etiquetas
Nombre otorgado a un conjunto de datos que tiene caracterı́sticas en común.
clasificación
Lista o relación ordenada de cosas o personas con arreglo a un criterio determinado.
predicción
La predicción en el contexto cientı́fico es una declaración precisa de lo que ocurrirá en de-
terminadas condiciones especificadas.
detección de objetos
La detección de objetos es una tecnologı́a de ordenador relacionada con la visión artificial y
el procesamiento de imagen que trata de detectar casos de objetos semánticos de una cierta
clase en vı́deos e imágenes digitales.
Reconocimiento de patrones:
˙ Es la rama cientı́fica que se encarga de emular la habilidad humana de reconocer ob-
jetos, mediante técnicas y métodos que sean implementados en máquinas desarrolladas y
construidas para este fin.
Recuperación:
˙ Proceso mediante el cual dado un patrón conocido como llave se obtiene de una me-
moria asociativa el patrón asociado a dicha llave.
RGB:
v

˙ Por sus siglas en inglés red, green, blue. Es la composición del color en términos de la
intensidad de los colores primarios de la luz.
UPME
˙ Unidad de Planeación Minero Energética.
VSS:
˙ Viviendas sin servicio de energı́a.
vi

Resumen

En el presente trabajo de tesis, se realiza una aplicación de Deep Learning, especı́ficamente


detección de Viviendas Sin Servicio de energı́a (VSS) en el mapa satelital del caserı́o de
Media Luna, ubicado en el municipio de Uribia al norte de La Guajira. A partir de un con-
junto de datos que conforman imágenes satelitales de viviendas de diferentes zonas rurales
de Colombia, obtenidas a través de Google Earth, se realizan dos modelos de predicción
diferentes, se hace una comparación de estos modelos, con el objetivo de obtener una mini-
mización del error de predicción. Para resolver el Problema se utilizaron diversas tecnologı́as,
entre ellas se encuentra TensorFlow y Keras para la creación de las redes neuronales, con
sus respectivas configuraciones. Se propone trabajar con Redes Neuronales Convolucionales
y un modelo pre-entrenado de Keras llamado VGG16, con una función de activación ReLu.
Los experimentos realizados muestran que el uso de Redes Convolucionales y los algoritmos
presentados tienen un desempeño aceptable y más eficiente que los métodos tradicionales
aplicados para el conteo de VSS en zonas rurales, con tiempos de procesamiento razonables
y rapidez en la entrega de la información requerida.
Palabras clave: Redes neuronales, redes convolucionales, convolución, deep learning,
machine learning, visión artificial, predicción, clasificación de imágenes, imágenes sa-
telitales, reconocimiento de patrones, aprendizaje profundo, aprendizaje automático,
redes de entrenamiento, .

Abstract
In this thesis project, a Deep Learning application is developed, specifically a tool for de-
tection of homes without utility services on the satellite map of the village of Media Luna,
located in the municipality of Uribia, north of La Guajira. Using a dataset composed of sa-
tellite images of homes in different rural areas of Colombia, obtained through Google Earth,
two different prediction models are developed, a comparison of these models is made with
the aim of minimizing the prediction error. Different technologies were used to solve the
problem, including TensorFlow and Keras for the creation of neural networks, with their
respective configurations. Convolutionary Neural Networks are proposed and a pre-trained
Keras model called VGG16 with a ReLu activation function. The experiments carried out
show that the use of Convolutional Networks and the algorithms presented have an ac-
ceptable and more efficient performance than the traditional methods applied for the VSS
counting in rural areas, with reasonable processing times and speed in the delivery of the
required information.
Keywords: neural networks, convolution, satellite images, deep learning, machine lear-
ning, training networks.
ÍNDICE

Glosario iv

Resumen vi
0.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
0.2 Justificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
0.3 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
0.3.1 Objetivo general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
0.3.2 Objetivos especı́ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1 Marco de referencia 5
1.1 Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Alcances y limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.1 Limitantes del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Marco teórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.1 Machine Learning o aprendizaje automático . . . . . . . . . . . . . . 9
1.3.2 Deep Learning o Aprendizaje Profundo . . . . . . . . . . . . . . . . . 13
1.3.3 Redes neuronales convolucionales (CNN o ConVet) . . . . . . . . . . 18
1.4 Librerı́as principales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
1.4.1 TensorFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
1.4.2 Flask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
1.4.3 Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
1.5 Viviendas sin servicio en Colombia (VSS) . . . . . . . . . . . . . . . . . . . . 58

2 Aplicación 60
2.1 Preparación del entorno de trabajo . . . . . . . . . . . . . . . . . . . . . . . 60
2.1.1 Instalación de TensorFlow y Keras . . . . . . . . . . . . . . . . . . . 61
2.2 Conjunto de datos de entrenamiento . . . . . . . . . . . . . . . . . . . . . . 61
2.3 Pre-procesamiento de imágenes . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.4 Entrenamiento de los modelos CNN y VGG16 . . . . . . . . . . . . . . . . . 65
2.4.1 Primer modelo: CNN . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.4.2 Segundo modelo: VGG16 . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.5 Predicción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
viii ÍNDICE

3 Comparación de los modelos 88


3.1 Discusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
3.2 Observaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

4 Aplicación Web 95
4.0.1 Manual de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

5 Conclusiones 99

6 Anexos 101
6.1 Inteligencia Artificial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.1.1 Imágenes satelitales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.1.2 Red Neuronal Artificial o RNA . . . . . . . . . . . . . . . . . . . . . 104
6.1.3 Anatomı́a del cerebro . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.1.4 Neurona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6.2 Librerı́as Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.2.1 Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.2.2 Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.2.3 Preprocessing.image . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.2.4 Aplications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.3 GPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

Bibliografı́a 123
Lista de Figuras

1-1. VSS de Media Luna - La Guajira [51] . . . . . . . . . . . . . . . . . . . . . . 7


1-2. Diagrama de flujo del Machine Learning [28] . . . . . . . . . . . . . . . . . . 10
1-3. Algoritmos utilizados en Machine Learning [49] . . . . . . . . . . . . . . . . 11
1-4. Comparación entre aprendizaje supervisado y no supervisado. . . . . . . . . 12
1-5. Diagrama perceptrón[17] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1-6. Estructura IA-ML-DL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1-7. cronologı́a Deep Learning [64] . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1-8. Crecimiento exponencial de la capacidad de computación como motor del
Deep Learning [38] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1-9. Transformación de coordenadas . . . . . . . . . . . . . . . . . . . . . . . . . 16
1-10.Coordenadas polares con linea trazada [38] . . . . . . . . . . . . . . . . . . . 17
1-11.Matriz de 6x6px con 3 canales de profundidad( RGB) . . . . . . . . . . . . . 19
1-12.El neocognitrón [16] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1-13.Estructura jerárquica del neocognitrón[16] . . . . . . . . . . . . . . . . . . . 20
1-14.Modelo de una célula S usada en neocognitrón[46] . . . . . . . . . . . . . . . 21
1-15.Arquitectura de una CNN por Lecun[46] . . . . . . . . . . . . . . . . . . . . 22
1-16.kernel[52] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1-17.Max Pooling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1-18.Arquitectura de una CNN[52] . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1-19.Arquitectura de red VGG16 . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1-20.Arquitectura de red AlexNet [28] . . . . . . . . . . . . . . . . . . . . . . . . 26
1-21.Encarnación GoogLeNet de la arquitectura Inception [19] . . . . . . . . . . . 27
1-22.Arquitectura de red GoogLeNet [28] . . . . . . . . . . . . . . . . . . . . . . . 28
1-23.Función binaria[61] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1-24.Datos distribuidos en forma de circulo, Playground Tensorflow . . . . . . . . 31
1-25.Modelo clasificador de una sola capa oculta con una sola neurona y función
de activación lineal, Playground Tensorflow . . . . . . . . . . . . . . . . . . . 31
1-26.Modelo clasificador de varias capas ocultas con varias neuronas y función de
activación lineal, Playground Tensorflow . . . . . . . . . . . . . . . . . . . . 32
1-27.Función sigmoidea[61] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1-28.Modelo clasificador de una capa oculta y una neurona con función de activa-
ción sigmoid[61] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
x Lista de Figuras

1-29.Modelo clasificador de una capa oculta y tres neuronas con función de acti-
vación sigmoid[61] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1-30.Función tanh[61] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1-31.Función tanh[61] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1-32.Modelo clasificados con una capa oculta y una neurona con activación ReLu[61] 37
1-33.Modelo clasificados con una capa oculta y una neurona con activación ReLu[61] 38
1-34.Softmax vs Sigmoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1-35.Modelo neuronal de Dropout [53] . . . . . . . . . . . . . . . . . . . . . . . . 39
1-36.Neuronas con Dropout[53] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1-37.Comparación de las operaciones básicas de una red estándar y de Dropout[33] 41
1-38.Aprendizaje supervisado[39] . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1-39.Aprendizaje no supervisado[39] . . . . . . . . . . . . . . . . . . . . . . . . . 43
1-40.Redes Neuronales Artificiales . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1-41.Comparación de clasificación supervisada y no supervisada . . . . . . . . . . 44
1-42.Gradiente [65] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
1-43.Evolución de los optimizadores . . . . . . . . . . . . . . . . . . . . . . . . . . 49
1-44.Optimizadores de descenso de gradiente[23] . . . . . . . . . . . . . . . . . . . 51
1-45.Etapas de una CNN [30] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
1-46.TensorBoard [56] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
1-47.TensorFlow Playground . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

2-1. Conjunto de entrenamiento[33] . . . . . . . . . . . . . . . . . . . . . . . . . . 62


2-2. Conjunto de entrenamiento[33] . . . . . . . . . . . . . . . . . . . . . . . . . . 62
2-3. Conjunto de entrenamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2-4. kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2-5. Max pooling de 2x2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2-6. primera convolución[52] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2-7. segunda convolución[52] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2-8. Arquitectura de una CNN [52] . . . . . . . . . . . . . . . . . . . . . . . . . . 70
2-9. Modelo CNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
2-10.Objeto History devuelto por fit generator . . . . . . . . . . . . . . . . . . . . 72
2-11.acc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
2-12.loss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2-13.val acc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2-14.val loss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
2-15.grafo del modelo cnn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
2-16.subgrafo conv1 de cnn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2-17.subgrafo maxpooling de cnn . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
2-19.subgrafo flatten de cnn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
2-20.subgrafo dropout y de cnn . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Lista de Figuras 1

2-21.subgrafo metrics de cnn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79


2-22.nodo auxiliar cnn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2-23.modelo VGG16[28] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2-24.modelo VGG16 [36] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
2-25.Ganancia de vgg16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
2-26.Pérdida de vgg16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
2-27.Ganancia validación de vgg16 . . . . . . . . . . . . . . . . . . . . . . . . . . 84
2-28.Pérdida validación de vgg16 . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
2-29.Mapa de Media luna dividido en parches de 60x60 [2] . . . . . . . . . . . . . 86

3-1. sitios UPME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88


3-2. Mapa Media Luna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3-3. acc modelos vgg16 y cnn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3-4. loss modelos vgg16 y cnn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3-5. val acc modelos vgg16 y cnn . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3-6. val loss modelos vgg16 y cnn . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3-7. Tabla comparativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

4-1. Página de inicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96


4-2. Página de inicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4-3. Página de conteo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
4-4. Página de la app . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

6-1. Inteligencia artificial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103


6-2. Situación de las redes neuronales en el campo de la Inteligencia Artificial[3] . 106
6-3. Tabla de resumen RNA [47] . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
6-4. Anatomı́a del cerebro [10] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6-5. Analogı́a entre cerebro humano y ordenador [6] . . . . . . . . . . . . . . . . 108
6-6. Comparación entre un ordenador y el cerebro [50] . . . . . . . . . . . . . . . 108
6-7. Imagen de una neurona de la corteza cerebral de una rata impregnada con la
técnica de Golgi [8]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6-8. Neurona artificial [48]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
6-9. Neurona artificial [21] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
6-10.Comparación Neurona Biológica y Neurona Artificial[21] . . . . . . . . . . . 111
6-11.Comparación Redes Neuronales Biológicas y RNA [21] . . . . . . . . . . . . 112
6-12.Esquema de una red de tres capas totalmente interconectadas[33] . . . . . . 112
6-13.Método compile Sequencial [25] . . . . . . . . . . . . . . . . . . . . . . . . . 114
6-14.Función de impulso 2D [52] . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6-15.Maxpooling 2D [41] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
6-16.Tiempo total de entrenamiento del modelo en relación con la GPU [67] . . . 121
6-17.Tiempo total de entrenamiento del modelo en relación con la GPU [67] . . . 122
2 Lista de Figuras

0.1. Introducción

En la actualidad, las imágenes satelitales pueden ser usadas para reconocer patrones de in-
terés en un área geográfica que puede utilizarse para realizar calibraciones espaciales en un
satélite, y ası́ dar a conocer el estado de una población,como por ejemplo, la deforestación de
una zona, de la agricultura, entre otros. Las predicciones realizadas por computador pueden
ayudar a automatizar el proceso de toma de decisiones, visualización y extracción de ca-
racterı́sticas complejas en las imágenes satelitales, según un artı́culo publicado en la revista
Indepent, la Fundación Bill & Melinda Gates (EE.UU.) ha realizado un mapa de población
más detallado y actualizado basado en un análisis de edificios en imágenes satelitales [59].
“Las imágenes satelitales podrı́an ser una de las herramientas más poderosas e imparciales
para contarle a la gente lo que está sucediendo en el planeta”, dijo en la cumbre Albert Lin,
cientı́fico investigador de la Universidad de California en San Diego.
En el reconocimiento de patrones de imágenes satelitales son utilizadas diversas técnicas de
Deep Learning, como los algoritmos de reducción, clasificación y regresión, a través de las
cuales se entrenan sistemas generalmente con muestras de imágenes y el sistema extrae las
caracterı́sticas necesarias para modelar el comportamiento de la salida, ante determinado
valor de entrada, de tal forma que permita asistir a empresas y organizaciones en la realiza-
ción de proyectos [24].

En la actualidad, las imágenes satelitales pueden ser usadas para reconocer patrones de in-
terés en un área geográfica, que sirven para realizar calibraciones espaciales en un satélite,
y ası́ dar a conocer el estado de una población, como, por ejemplo, la deforestación de una
zona, de la agricultura, entre otros. Las predicciones realizadas por computador pueden apli-
carse en diferentes áreas de conocimiento y como una herramienta versátil, un antecesor de
conteo poblacional fue ideado por GiveDirectly, una organización sin fines de lucro que iden-
tifica hogares pobres en zonas rurales de Kenia y Uganda para entregar dinero (al menos el
90 % ) de cada dolar donado en manos de las personas que lo necesitan a través del teléfono
móvil. Usando imágenes satélites de estas zonas, obtenidas de Google Maps, se implementó
un algoritmo que identifico los hogares individuales en una imagen, usando la coincidencia
de plantillas y fue capaz de identificar el umbral de color que los clasifico como paja o me-
tal (representando techado de viviendas). En las primeras pruebas, se obtuvieron resultados
bastantes alentadores, pues el algoritmo logro una alta tasa de clasificación, sin embargo,
este dato se vio fuertemente alterado al encontrarse con que los techados de estructuras como
cocina o cobertizos inflaban sus números [11].

Para realizar un conteo de VSS bien fundamentado, es necesario considerar una gran canti-
dad de imágenes satelitales relacionadas. A pesar de que esta cantidad puede obtenerse por
medio de censos, usualmente es imposible para las empresas y organizaciones obtener este
dato con precisión. Es por esto que algunas de las técnicas de Deep Learning tienen la capa-
0.2 Justificación 3

cidad de extraer caracterı́sticas implı́citas en las imágenes satelitales sin que estas hayan sido
previamente clasificadas y armar grupos ubicando las imágenes en diferentes categorı́as, de-
pendiendo de si se muestran signos que reflejen o signifiquen en determinada zona, liberando
de esta pesada carga a las organizaciones a fin. Además existen técnicas capaces de realizar
una extracción de caracterı́sticas automática, dependiendo los patrones de las imágenes, un
ejemplo de estos es el Deep Learning.
El eje de este trabajo investigativo, es la necesidad de contar con una herramienta capaz
de clasificar los techos de VSS, mediante modelos de entrenamiento de redes neuronales
convolucionales ofrecidos por el Deep Learning, que harán uso de imágenes satelitales de
zonas rurales en donde no se tengan servicios de electricidad, como el caso del caserı́o de
Media Luna.

0.2. Justificación
Sin lugar a dudas se está realizando un esfuerzo por parte del gobierno para identificar
las VSS, por medio del levantamiento de información primaria, secundaria, ası́ como la
información reportada por terceros; dicho esfuerzo no ha sido suficiente para cuantificar el
número de VSS de una manera precisa y eficiente, ante este panorama se hace visible la
necesidad de una herramienta tecnológica que contribuya en esta identificación. Para apoyar
con esta labor existen diferentes alternativas, entre estas, Deep Learning (o aprendizaje
profundo) que hace parte de la inteligencia artificial y para este caso se enfoca en la visión
artificial con uso de algoritmos que van a parsear datos, aprender de ellos, identificar patrones
y luego serán capaces de identificar VSS; No obstante, las imágenes satélitales a procesar han
sido previamente seleccionadas y limitadas a una región particular por su claridad, definición
y poca obstrucción de elementos, que faciliten la exploración detallada de las mismas, es este
carácter exploratorio lo que se ajusta perfectamente a Python, un lenguaje de programación
de alto nivel que tiene un gran potencial en este campo, la comunidad de desarrolladores
ha aportado varios paquetes como PyBrain (Schaul et al., 2010) o scikit-learn (Pedregosa
et al., 2011), entre otros, al campo del Deep Learning. De todos ellos, el más conocido tal
vez sea scikit-learn 1 y la librerı́a Theano, que es un proyecto de código abierto desarrollado
principalmente por un grupo de aprendizaje automático de la Universidad Montreal2 . Esta
librerı́a y su integración Numpy, se convirtieron en sus inicios en una de las librerı́as más
usadas para Deep Learning de propósito general.
Este proyecto, es un medio para complementar y aplicar conocimientos relacionados con el
aprendizaje de máquina y procesamiento de imágenes satélitales.

1
Repositorio Github, disponible en: https://github.com/scikit-learn/scikit-learn, última fecha de consulta:
15/06/18
2
Librerı́a Theano disponible en: www.deeplearning.net, última fecha de consulta 15/06/18
4 Lista de Figuras

0.3. Objetivos
0.3.1. Objetivo general
Desarrollar una aplicación basada en Deep Learning que detecte, clasifique y cuente Vivien-
das Sin Servicio de energı́a en imágenes satelitales del caserı́o Media Luna-Uribia-Guajira.

0.3.2. Objetivos especı́ficos


Crear un modelo de Redes Neuronales Convolucionales capaz de predecir si en una
imagen satelital hay una vivienda.

Implementar un modelo pre-entrenado de Keras para verificar su eficacia en la detección


de viviendas en una imagen satelital.

Construir un algoritmo que cuente en un mapa la cantidad de viviendas detectadas en


él, utilizando un modelo entrenado de Red Neuronal Convolucional.

Validar y comparar los resultados de la cantidad de Viviendas Sin Servicio obtenidos


por los modelos de CNN con los datos reales.
1 Marco de referencia

1.1. Antecedentes

En la actualidad los satélites como el GeoEye-1 de Google nos ofrecen una buena perspectiva
de la Tierra por medio de imágenes con alta resolución, lo que facilita ver detalles de lo que
ocurre dentro de ella, por eso se usan cada vez con más frecuencia. En estas imágenes
se aprecian todos sus recursos y el impacto ambiental. El uso de imágenes satelitales ha
demostrado ser una fuente rentable de información relevante para numerosas aplicaciones,
como por ejemplo la planificación urbana, la vigilancia del medio ambiente, para la evaluación
agrı́cola y de cultivos, exploraciones de minas y muchas otras [9].
Cabe destacar que la correcta clasificación de estas imágenes es sumamente importante
como es el caso del estudio de recursos naturales o censos poblacionales, donde es necesaria
la clasificación de diferentes imágenes como flores, agua, vegetación, nubes, suelos o techos
de viviendas.
GiveDirectly es una organización sin fines de lucro que identifica algunos de los hogares más
pobres de las zonas rurales de Kenia y Uganda y les da dinero a través de una transferencia de
teléfono móvil. El objetivo de GiveDirectly es poner al menos el 90 por ciento de cada dólar
donado en manos de las personas que lo necesitan. Gracias a las imágenes satélites de Google
Earth, habı́a imágenes del campo en Kenia y Uganda que podrı́an analizarse para identificar
los tipos de techado utilizados en un pueblo en particular. El algoritmo identificó los hogares
individuales en una imagen usando la coincidencia de plantillas y fue capaz de identificar el
umbral de color que los clasificó como paja o metal. Luego, el algoritmo se aplicó a un pueblo
entero para determinar la proporción de paja en casas techadas de metal. En las primeras
pruebas, el algoritmo logró una alta tasa de clasificación (89.67 %) al estimar el número de
techos de paja vs. techos de hierro. Sin embargo, cuando se intentó usar el algoritmo en el
campo, descubrieron que el nivel de precisión era mucho menor. Con la ayuda del embajador
de datos, Lluis Canet, se descubrió que habı́a una serie de factores externos que hacı́an que
el algoritmo fuera menos preciso. Por un lado, hay muchas estructuras en Kenia y Uganda
que tienen techos de paja, pero no son hogares, como cocinas y cobertizos. Estos edificios
estaban inflando artificialmente el número de hogares con techos de paja, lo que hacı́a que
las áreas se vieran más pobres de lo que eran. [11]
6 1 Marco de referencia

1.2. Alcances y limitaciones


La falta de servicios públicos es un gran problema para cualquier ser humano, si hablamos de
la energı́a eléctrica en especı́fico, podemos ver que su existencia es de gran ayuda y sin mayor
trascendencia hoy dı́a, pero la falta de esta es bastante notoria y limitante. En Colombia
1.209.000 personas no tienen servicio de energı́a eléctrica, la población afectada por la falta
de electricidad se encuentra distribuida en 1.562 localidades, la gran mayorı́a en las zonas
rurales del oriente y el sur colombiano, y en regiones del Chocó, Nariño, La Alta Guajira
y Cauca sobre el litoral Pacı́fico, según el más reciente informe de la Superintendencia de
Servicios Públicos, donde se indica que la falta del servicio permanente afecta, de manera
especial, las zonas del paı́s sin interconexión, que alcanzan el 66 % del territorio nacional
[15].
Según David Riaño, superintendente delegado de energı́a y gas, la problemática general en las
Zonas No Interconectadas - ZNI obedece, entre otras causas, a la baja demanda (producto
de una reducida disponibilidad y la precaria actividad industrial y comercial); a los altos
niveles de pérdidas por deficiencia en redes y en el esquema de comercialización; deterioro
de la relación cliente prestador y deficientes sistemas de medición[42].
Es en esto último, los deficientes sistemas de medición, donde este proyecto pretende cola-
borar, haciendo uso de redes neuronales artificiales-RNA basadas en Deep Learning, como
las convolucionales, que reciben de entrada imágenes especı́ficamente[63], se podrı́an obtener
datos más precisos, ya que el enorme desarrollo que está viviendo la tecnologı́a asociada a
la Inteligencia Artificial (IA) está dando lugar en los últimos tiempos a nuevas herramientas
y aplicaciones importantes, como el famoso caso de Google Brain para el reconocimiento de
imágenes de gatos e imágenes faciales[42], donde los algoritmos lograron una precisión de
más del 80 %. Una de las áreas donde los avances han sido más notables es el reconocimiento
de patrones de imágenes, en parte gracias al desarrollo de nuevas técnicas de Deep Learning
o aprendizaje profundo. Lo que aporta de sobremanera al objetivo de esta colaboración que
es cuantificar las VSS y con una fiabilidad importante pues hoy en dı́a tenemos al alcance de
nuestra mano sistemas más precisos que los propios humanos, en las tareas de clasificación
y detección en imágenes.
El caserı́o Media Luna, ubicado en el municipio de Uribia en La Guajira, es un gran candidato
para esta investigación. Este caserı́o fue seleccionado teniendo en cuenta muchos factores,
como por ejemplo, el hecho de que su territorio es muy visible en las imágenes satelitales de
Google maps, lo cual es de vital importancia para que los algoritmos hagan lo suyo, contar
VSS, y el hecho de que se cuenta con el dato de VSS, sacado del aplicativo Sitios Upme1 ,
que será de utilidad a la hora de hacer una comparación entre los resultados obtenidos de la
aplicación realizada en este proyecto y los datos obtenidos por la UPME.
Esto significa que Media Luna cumple con los requisitos para poder hacer uso de estos
algoritmos de deep learning y lograr el mejor resultado posible.
1
SitiosUpme, disponible en: http://sig.simec.gov.co/SitiosUpme/, fecha última consulta: 14/06/18
1.2 Alcances y limitaciones 7

Sitios Upme es una herramienta para la recolección de la información correspondiente a la


ubicación geográfica de los SITIOS ası́ como las viviendas totales y viviendas que no cuentan
con el servicio de energı́a eléctrica, tanto urbano como rural. Esta herramienta es una ayuda
para que las entidades territoriales reporten información, produciéndose una capa propia
de la UPME quien validará con otras fuentes la ubicación espacial de las localidades, para
conseguir mayor calidad en la información para el planeamiento de la expansión de cobertura
de energı́a eléctrica de la región. 2
En la figura 1.1 se tiene una captura del aplicativo en el que se muestra la región del caserı́o
Media Luna de La Guajira junto con su caja de información:

Figura 1-1: VSS de Media Luna - La Guajira [51]

Como se puede observar en la figura 1-1, según la UPME el caserı́o de Media Luna - La
Guajira, cuenta con un total de 179 VSS, aunque este es un dato obtenido por aproximación,
lo que conlleva a una amplia tolerancia en un comparación de resultados. Esto quiere decir
que podemos usar este dato de Sitios Upme para comparar con los resultados que se obtengan
al implementar la herramienta que propone este proyecto.
Valga aclarar que este sector es seleccionado como una muestra pero podrı́a replicarse a lo
largo del territorio nacional o incluso mundial con la salvedad de que la imágenes a procesar
deben ser claras, sin interferencia de nubes, arboles o cualquier otro artefacto que limite la
visibilidad de la imagen y no permita funcionar al software. Por ejemplo, en Uganda una
organización hizo algo parecido, haciendo uso de imágenes satélites y con Deep Learning
encontraron pueblos necesitados, estos datos, muy importantes para organizaciones sin ánimo
de lucro interesadas [62].
2
SitiosUpme, disponible en: http://sig.simec.gov.co/SitiosUpme/, fecha última consulta: 14/06/18
8 1 Marco de referencia

Con el uso de deep learning, en lugar de entrenar el algoritmo, como con el machine learning,
este buscará por sı́ mismo los lı́mites de la imagen e irá analizando las formas de la imagen de
manera jerárquica encontrando los atributos indicados. Por último, decidirá cuáles de estas
propiedades son las necesarias para llegar a la respuesta. De esta forma, puede equivocarse
una vez, pero aprenderá de su error y si le llegan millones de datos, se auto-entrenará para
no fallar. Esto último es una de las desventajas del deep learning, ya que necesita un número
muy alto de datos para que el algoritmo tome decisiones correctas. Sin embargo, como el flujo
de datos del que disponemos cada vez tiende a ser mayor, se convierte en una de sus grandes
ventajas, siempre que le lleguen nuevas situaciones, irá mejorando de forma automática.
La red neuronal convolucional se implementará completamente en Python ya que este so-
bresale sobre cualquier otro lenguaje porque cuenta con soportes para frameworks de Deep
Learning de muy buena calidad. Los más destacados según un ranking realizado por The
Data Incubato en 2017 son: TensorFlow, Theano, Keras, Caffe y MXNet [34].
Esta herramienta se entregará en modo ejecutable, y para el almacenamiento de imágenes
se implementa Google Cloud.

1.2.1. Limitantes del algoritmo


Al igual que en las redes neuronales convencionales, se tendrá un margen de error y el objetivo
de este proyecto es llegar al punto mı́nimo de éste, o lo más cercano posible a ese punto.
Dicho esto, se rescata que el porcentaje de VSS puede verse alterado por establos u otra
construcción techada de forma similar a una casa, esto ya esta contemplado y aún ası́ son
bastante alentadores los resultados a obtener por la herramienta y más al contemplar que el
conteo se realiza para conocer la cantidad de viviendas sin servicio pero para el caso de la
electricidad también se requiere en estas construcciones entonces conviene que existan en el
conteo aunque ayudan a flexibilizar la cercanı́a con la aproximación de VSS obtenida por la
UPME. El algoritmo de retropropagación no tiene un buen desempeño, el problema radica
en que este algoritmo está basado en el cálculo del gradiente, que es un método que usa
información local y usualmente se inicia en puntos aleatorios, lo cual puede ocasionar que
se quede atorado en mı́nimos locales, incluso si se hace uso de modificaciones al algoritmo
como el batch-mode o el gradiente de descenso estocástico [14]. Este riesgo aumenta junto
con la profundidad de la red.
En el caso de Uganda en el que se usó deep learning para identificar los tipos de techado
utilizados en una parte del pueblo. El algoritmo identificó los hogares individuales en una
imagen usando la coincidencia de plantillas y fue capaz de identificar el umbral de color
que los clasificó como paja o metal. Luego, el algoritmo se aplicó a un pueblo entero para
determinar la proporción de paja en casas techadas de metal. Y como se menciono anterior-
mente los resultados en pruebas fueron superiores, en búsqueda de mantener altos ı́ndices
de precisión se dan la recomendaciones para las imágenes de zonas que se desean analizar,
mantener claridad, sin obstrucciones, a la altura indica, etc. Esto permite que la extensión
1.3 Marco teórico 9

de uso no se limite a gran medida mientras se sigan las instrucciones.

1.3. Marco teórico

1.3.1. Machine Learning o aprendizaje automático

El Machine Learning, también conocido como aprendizaje automático es cada vez más ha-
bitual, las máquinas aprenden por sı́ solas, son capaces de auto programarse aprendiendo de
su propia experiencia combinando datos de entradas y situaciones del mundo real.

En términos generales, los dos sub-grupos principales del Machine Learning son el apren-
dizaje supervisado y el aprendizaje no supervisado. En el aprendizaje supervisado, la
atención se centra en la predicción precisa, mientras que en el aprendizaje no supervisado el
objetivo es encontrar descripciones precisas y compactas de los datos.
Particularmente en el aprendizaje supervisado, uno está interesado en los métodos que funcio-
nan bien con datos que no se habı́an visto anteriormente. Es decir, el método se ‘generalizaá
datos invisibles. En este sentido, se distingue entre los datos que se utilizan para entrenar
un modelo y los datos que se usan para probar el rendimiento del modelo entrenado[7].

En general el Machine Learning es supervisado y esto sucede gracias a que utiliza Deep
Learning. Este funciona por medio de redes neuronales que imitan al cerebro humano
usando hasta miles de millones de “neuronas” o unidades computacionales que se organizan
en capas y cada capa aprende patrones una de la otra por lo que en conjunto se desarrollan
patrones de definiciones, conducta, acciones, colores, objetos o simplemente luce algo.

En la figura 1-14 tenemos un diagrama de flujo del Machine Learning:


10 1 Marco de referencia

Figura 1-2: Diagrama de flujo del Machine Learning [28]

Como se ve en la figura 1-14, la información potencial depositada en el lago (Conjunto de


entrenamiento) se vierte hacia una primera lı́nea de clasificación cuando el algoritmo se
pregunta si las caracterı́sticas de los datos son conocidas o no. La respuesta implicara la
siguiente clasificación:

Aprendizaje supervisado. Dado un conjunto de datos D = (xn, yn), n = 1, ..., N la tarea


es “aprender”la relación entre la entrada x y la salida y de tal manera que, cuando se le da
una nueva entrada x, la salida predicha y * es precisa. Para especificar explı́citamente qué
significa la precisión, se define una función de pérdida L (ypred, ytrue) o, por el contrario,
una función de utilidad U = L.

El termino ”Supervisadoı̈ndica que hay un ”supervisor”que especifica la salida y para cada


entrada x en el datos D. La salida también se denomina .etiqueta”, particularmente cuando
se discute la clasificación[7]. La idea es crear modelos que le permita a las máquinas apren-
der a través de un conjunto de datos que se le entregan y que, conforme al desarrollo de la
máquina, se van corrigiendo. En otras palabras, es moldear la experiencia y la manera en
que un cerebro (en este caso, una máquina) la procesa.
1.3 Marco teórico 11

Aprendizaje No Supervisado: para los datos desconocidos. En este caso, el algoritmo


tendrá que inferir el valor de los datos de entrada según un grupo de datos o por alguna
probabilidad de producir un dato concreto que en su momento se convertirá en un dato ya
conocido[23].

Resumiendo, en el aprendizaje supervisado, la atención se centra en la predicción precisa,


mientras que en el aprendizaje no supervisado el objetivo es encontrar descripciones precisas
y compactas de los datos.

En el Machine Learning existen al menos siete grandes grupos de algoritmos que corres-
ponden a cuatro clasificaciones[49]:

Figura 1-3: Algoritmos utilizados en Machine Learning [49]

Como segundo paso, el algoritmo hace un segundo agrupamiento al preguntarse si los datos
pueden compartir atributos comunes entre sı́ para crear una Categorı́a o si forma parte de
un flujo continuo de datos no estructurados. La repuesta implicará una segunda clasifica-
ción:

Aprendizaje continuo: La data se hace disponible siguiendo un orden secuencial y para


la cual se necesitara algún tipo de regresión o de agrupación por lo que el algoritmo deberá
ajustarse dinámicamente.
Aprendizaje en categorı́as: La data se va agrupando por alguna clasificación o siguiendo
12 1 Marco de referencia

un análisis por asociación. En la figura 1-16 se muestran dos gráficas con las diferencias entre
los aprendizajes supervisados y no supervisados:

Figura 1-4: Comparación entre aprendizaje supervisado y no supervisado.

En la figura 1-17 tenemos un diagrama que muestra la red del Perceptrón, el cual usa
aprendizaje supervisado, este actualiza su lı́mite lineal a medida que se agregan más ejemplos
de capacitación.

Figura 1-5: Diagrama perceptrón[17]


1.3 Marco teórico 13

1.3.2. Deep Learning o Aprendizaje Profundo


Aprendizaje profundo (en inglés, Deep Learning) es un conjunto de algoritmos de clase apren-
dizaje automático (en inglés, machine learning) que intenta modelar abstracciones de alto
nivel en datos usando arquitecturas compuestas de transformaciones no lineales múltiples[68].
En general se trata de una clase de algoritmos ideados para el aprendizaje automático, con
este concepto nos referimos a una técnica concreta dentro del Machine Learning, un subcon-
junto, el cual desarrolla la idea del aprendizaje profundo a través de modelos informáticos
que funciona de forma similar al cerebro humano, un sistema de redes artificiales de neuronas
que analiza los datos.
Como segundo paso, el algoritmo hace un segundo agrupamiento al preguntarse si el torrente
de datos puede compartir atributos comunes entre sı́ para crear una Categorı́a o si forma
parte de un flujo continuo de datos no estructurados. La repuesta implicará una segunda
clasificación:
Aprendizaje Continuo: la data se hace disponible siguiendo un orden secuencial y para la
cual se necesitara algún tipo de regresión o de agrupación por lo que el algoritmo deberá
ajustarse dinámicamente. Aprendizaje en Categorı́as: la data se va agrupando por alguna
clasificación o siguiendo un análisis por asociación.

Figura 1-6: Estructura IA-ML-DL


14 1 Marco de referencia

La máquina evalúa ejemplos e instrucciones para modificar el modelo en el caso de que se


produzcan errores. El sistema extrae patrones que facilitan la solución de problemas de una
manera bastante precisa, en definitiva, toma decisiones a partir de datos. En este paradigma
los algoritmos son capaces de aprender sin intervención humana previa, es decir está orientado
al aprendizaje no supervisado, sacando ellos mismos las conclusiones acerca de la semántica
embebida en los datos. Ya existen compañı́as que se centran completamente en enfoques de
aprendizaje automático no supervisado, como Loop AI Labs.
No existe una única definición de aprendizaje profundo, pero todas las formas de definir el
deep learning tienen en común el uso de múltiples capas de procesamiento no lineal. Las
capas forman una jerarquı́a de caracterı́sticas desde un nivel de abstracción más bajo a uno
más alto.
Ya se ha mencionado que el equipo de Krizhevsky fue un punto de inflexión importante
en el campo de Deep Learning, y desde entonces se han ido dando buenos resultados, uno
tras otro, con un crecimiento exponencial de resultados cada vez más sorprendentes. Aunque
la investigación en este campo ha estado guiada por los hallazgos experimentales más que
por la teorı́a, en el sentido de que aunque las primeras teorı́as sobre el Deep Learning se
desarrollaron en la década de los ochenta, estos grandes avances en el área se comenzaron a
dar a partir del 2012.

En la figura 1-19 se puede observar la cronologı́a del Deep Learning:

Figura 1-7: cronologı́a Deep Learning [64]

Estos grandes avances solo han sido posibles gracias a que la computación que se requerı́a
para poderlos llevar a cabo estaba disponible; de esta manera, los investigadores de este
1.3 Marco teórico 15

campo han podido poner a prueba y ampliar viejas ideas, a la vez que han avanzado con
nuevas que requerı́an muchos recursos de computación. Recientemente OpenAI 3 ha publica-
do en su blog un estudio [38] que corrobora precisamente esta visión de la que se ha hablado.
Concretamente, presentan un análisis en el que se confirma que, desde 2012, la cantidad de
computación disponible para generar modelos de inteligencia artificial ha aumentado expo-
nencialmente a la vez que afirman que las mejoras en la capacidad de cálculo han sido un
componente clave del progreso de la inteligencia artificial. En este mismo artı́culo presentan
una gráfica detallada para sintetizar los resultados de su análisis de la figura 1-20.
Las aplicaciones de Deep Learning se utilizan en sectores diferentes como la conducción
autónoma, los dispositivos médicos, el sector aeroespacial y de defensa, automatización in-
dustrial, electrónica y en procesamiento de imágenes para reconocer objetos o patrones.

Figura 1-8: Crecimiento exponencial de la capacidad de computación como motor del Deep
Learning [38]

3
Consulte: https://openai.com/
16 1 Marco de referencia

En el Aprendizaje Profundo, la palabra “aprendizaje”describe un proceso de búsqueda au-


tomática para obtener mejores representaciones de los datos que está analizando y es-
tudiando, hay que tener esto en cuenta, el modelo no está haciendo que una computadora
aprenda, sino una representación que es solo una forma de ver los datos.

Para dar a entender mejor, se mostrará un ejemplo tomado del libro de Ian Goodfellow, Deep
Learning[18]. Supongamos que se quiere dibujar una lı́nea que separe los cı́rculos azules de
los triángulos verdes de la imagen de la izquierda:

Figura 1-9: Transformación de coordenadas

Si la solución pensada es usar una lı́nea, el autor dice lo siguiente: “. . . representamos algunos
datos usando coordenadas cartesianas, y la tarea es imposible”.Y realmente es imposible si
tenemos en cuenta la definición de una linea: “Una lı́nea es una figura recta unidimensional
sin grosor y que se extiende infinitamente en ambas direcciones”. De Wolfram MathWorld.

Para dar solución al problema anterior hay que encontrar una manera de representar estos
datos de una manera diferente, de alguna manera en la que se pueda trazar una lı́nea recta
para separar los tipos de datos. Esto es algo que las matemáticas nos enseñaron hace cientos
de años. En este caso, lo que se necesita es una transformación de coordenadas, de modo
que pueda graficar o representar estos datos de forma que podamos dibujar esta lı́nea. Si
observamos la transformación de coordenadas polares, tenemos la solución: Y eso es
todo ahora es posible trazar una lı́nea:
1.3 Marco teórico 17

Figura 1-10: Coordenadas polares con linea trazada [38]

Entonces, en este sencillo ejemplo, se encontró y eligió la transformación para obtener una
mejor representación a mano. Pero si se crea un sistema, un programa que pueda buscar
representaciones diferentes (en este caso, un cambio de coordenadas), y luego encontramos
una forma de calcular el porcentaje de categorı́as que se clasifican correctamente con este
nuevo enfoque, en ese momento estaremos haciendo Machine Learning.
Esto es algo muy importante a tener en cuenta, el Deep Learning es el aprendizaje de repre-
sentaciones utilizando diferentes tipos de redes neuronales y optimizando los hiperparámetros
de la red para obtener (aprender) la mejor representación de nuestros datos.

Hiperparámetros
Los hiperparámetros son parámetros ajustables que se eligen para entrenar un modelo y
que rigen el propio proceso de entrenamiento. Por ejemplo, para entrenar una red neuronal
profunda, debe decidir el número de capas ocultas en la red y la cantidad de nodos de cada
capa antes de entrenar al modelo. Estos valores suelen permanecer constantes durante el
proceso de entrenamiento. En escenarios de aprendizaje profundo o aprendizaje automáti-
co, el rendimiento del modelo depende en gran medida de los valores de hiperparámetro
seleccionados. El objetivo de la exploración de los hiperparámetros es buscar entre diversas
configuraciones de hiperparámetros hasta dar con la que tenga como resultado un rendi-
miento óptimo. Normalmente, el proceso de exploración de hiperparámetros es un trabajo
manual muy laborioso, dado que el espacio de búsqueda es muy extenso y la evaluación de
cada configuración puede ser costosa[35].

El ajuste de hiperparámetros incluye los siguientes pasos[35]:

Definir el espacio de búsqueda de parámetros

Especificar una métrica principal para optimizar


18 1 Marco de referencia

Especificar criterios de finalización anticipada para

series de bajo rendimiento

Asignar recursos para el ajuste de hiperparámetros

Iniciar un experimento con la configuración anterior

Visualizar las series de entrenamiento

Seleccionar la configuración de rendimiento óptima para el modelo

Cada hiperparámetro puede ser discreto o continuo, los hiperparámetros discretos se espe-
cifican con un objeto choice entre valores discretos[35]. Los hiperparámetros continuos se
especifican como una distribución a través de un intervalo continuo de valores. Las distribu-
ciones admitidas son[35]:

uniform(low, high): devuelve un valor distribuido uniformemente entre bajo y alto.

loguniform(low, high): devuelve un valor que se extrae según exp(uniform(low, high))


de forma que el logaritmo del valor devuelto se distribuye uniformemente.

normal(mu, sigma): devuelve un valor real que se distribuye normalmente con media
mu y desviación estándar sigma.

lognormal(mu, sigma): devuelve un valor extraı́do según exp(normal(mu, sigma)) de


forma que el logaritmo del valor devuelto se distribuye normalmente.

Con esta herramienta se puede experimentar con diferentes hiperparámetros y ver su com-
portamiento. Precisamente, la flexibilidad de las redes neuronales es una de sus virtudes y a
la vez uno de sus inconvenientes para los que se inician en el tema: hay muchos hiperparáme-
tros para ajustar.
Tensorflow Play Ground es una herramienta web de Tensorflow que permite experimentar
con algunos hiperparámetros y crear redes neuronales profundas, con esta herramienta es
posible analizar la influencia de algún hiperparámetro en el aprendizaje de una red, ya que
hace una simulación del comportamiento de esta. Para más información consulte la sección
2.4.14

1.3.3. Redes neuronales convolucionales (CNN o ConVet)


En redes neuronales, la red neuronal convolucional también llamadas ConvNets o simple-
mente CNN, es una de las categorı́as principales para hacer el reconocimiento de imágenes.
Clasificaciones de imágenes, detecciones de objetos, reconocimientos faciales, etc., son algu-
nas de las áreas donde se utilizan ampliamente las CNN.
4
consulte: https://playground.tensorflow.org/
1.3 Marco teórico 19

Las CNN toman una imagen de entrada, la procesan y clasifican en ciertas categorı́as o
clases. Los ordenadores ven una imagen de entrada como una matriz de pı́xeles y depende
de la resolución de la imagen. Según la resolución de la imagen, verá hxwxd (h: Altura, w:
Ancho, d: Dimensión). Por ejemplo, una imagen de 6x6x3 es una matriz de RGB (3 se refiere
a la cantidad de canales, Red, Green, Blue) y una imagen de 6x6x1, es una matriz de una
imagen de escala de grises.

Figura 1-11: Matriz de 6x6px con 3 canales de profundidad( RGB)

Las neuronas de una CNN poseen un patrón de conectividad inspirado en el córtex visual de
un cerebro biológico, son una variación del Perceptrón Multicapa -MLP, pero están diseñadas
para requerir la mı́nima cantidad de procesamiento, lo cual hace más eficiente las tareas de
visión artificial, como el reconocimiento de imágenes.

Figura 1-12: El neocognitrón [16]


20 1 Marco de referencia

Los fundamentos de las Redes Neuronales Convolucionales se basan en el Neocognitron,


introducido por Kunihiko Fukushima en 1980, El neocognitron es una red neuronal artificial
jerárquica y multicapa que ha sido utilizada para el reconocimiento de caracteres a mano
y otras tareas de reconocimiento de patrones , y ha servido de inspiración para las redes
neuronales convolucionales[32]. Este sistema posee una aplicación práctica muy amplia ya que
a juzgar por las introducciones de algunos de sus artı́culos, Fukushima y sus colaboradores
parecen estar más interesados en desarrollar un modelo del cerebro. Con este objetivo, su
diseño se basó en el trabajo seminal desarrollado por Hubel y Weisel, que aclaraba parte de
la arquitectura funcional de la corteza visual.

El neocognitrón es un buen ejemplo de la forma en que unos resultados neurobiológicos se


pueden emplear para desarrollar una arquitectura de red.

Figura 1-13: Estructura jerárquica del neocognitrón[16]


1.3 Marco teórico 21

En el procesamiento de la capa S, la retina (capa u0), es una matriz de 19x19px, cada plano
de Usi tendrá una matriz del mismo tamaño de la retina (19x19px) y cada plano barre toda
la retina en busca de cierta caracterı́stica. Cada célula del plano S busca exactamente la
misma caracterı́stica pero en una posición diferente de la retina. El campo receptivo de cada
una de las células S corresponde a una matriz de 3x3 y hay un plano de células Vc asociado
a cada capa S del sistema. La salida de una célula Vc va a una sola célula S de todos los
planos de la capa, la salida de la célula Vc tiene un efecto inhibitorio sobre las células S [16].

Figura 1-14: Modelo de una célula S usada en neocognitrón[46]

Este modelo fue más tarde mejorado por Yann LeCun et al en 1982 al introducir un método
de aprendizaje basado en backpropagation(o propagación hacia atrás) para poder entrenar el
sistema correctamente. En el año 2012, fueron refinadas por Dan Ciresan y otros, y fueron
implementadas para una unidad de procesamiento gráfico (GPU) consiguiendo ası́ resultados
impresionantes[16].
la arquitectura de la CNN de LeCun y el Neocognitron de Fukushima se parecen en muchos
aspectos. Son una secuencia de capas-S y Capas-C alternas, aquı́ llamadas capas de convo-
lución y submuestreo, formadas por las llamadas mapas de caracterı́sticas correspondientes
a los planos S y C del neocognitron.
Hay que tener en cuenta que, al contrario de lo que se espera de las notaciones, las capas
S corresponden a las capas de convolución y las capas C a las capas de submuestreo. El
modelo CNN también implementa los conceptos de campos receptivos y el intercambio de
peso. Sin embargo, el modelo de las neuronas individuales es el Perceptrón básico [46] con
una función de activación sigmoide. Eso significa que no hay entrada inhibitoria ni planos
en V, lo que simplifica el modelo y la arquitectura en general. Una ventaja adicional de este
modelo es que la red no tiene que ser entrenada capa por capa, sino que todos los pesos
se ajustan iterativamente por error de backpropagation minimizando una función de error
global. Como consecuencia, las caracterı́sticas a extraer, es decir, bordes, esquinas, etc, no
22 1 Marco de referencia

se eligen manualmente sino que se encuentran automáticamente al aprender las máscaras de


convolución formadas por los pesos de los respectivos mapas de caracterı́sticas.

Figura 1-15: Arquitectura de una CNN por Lecun[46]

Las Redes Neuronales Convolucionales están compuestas por una capa de entrada, una de
salida y varias capas ocultas, ası́ como cualquier red neuronal, lo que diferencia a las CNN,
es que hacen la suposición explı́cita de que las entradas son imágenes, por esto se nos permi-
te codificar algunas propiedades en la arquitectura para reconocer objetos concretos en las
imágenes. En una CNN cada capa va aprendiendo diferentes niveles de abstracción, ası́ que
un número significativo de capas pueden conseguir identificar estructuras más complejas en
los datos de entrada[60].

Técnicamente, en los modelos CNN de Deep Learning para entrenar y probar, cada imagen de
entrada se pasa a través de una serie de capas de convolución con filtros (kernels), agrupación,
capas totalmente conectadas (FC) y aplicará la función Softmax para clasificar un objeto
con valores probabilı́sticos entre 0 y 1. La siguiente figura es un flujo completo de CNN para
procesar una imagen de entrada y clasifica los objetos según los valores.

Componentes básicos de una ConVet:


Las capas que definen a las redes convolucionales pueden expresarse como grupos de neuro-
nas especializadas en dos operaciones: convolución y pooling.
1.3 Marco teórico 23

Convolución

La principal diferencia entre una capa densamente conectada y una capa especializada en la
operación de convolución, es que la capa densa aprende patrones globales en su espacio global
de entrada, mientras que las capas convolucionales aprenden patrones locales en pequeñas
ventanas de dos dimensiones.
El objetivo principal de una capa convolucional es detectar caracterı́sticas o rasgos visuales en
las imágenes como aristas, lı́neas, gotas de color, etc. Una vez aprendida una caracterı́stica
en un punto concreto de la imagen la puede reconocer después en cualquier parte de la
misma. En cambio, en una red neuronal densamente conectada tiene que aprender el patrón
nuevamente si este aparece en una nueva localización de la imagen[60].
Generalmente las capas convolucionales operan sobre tensores de 3D, conocidos como feature
maps, este cuenta con dos ejes espaciales de altura y anchura y otro eje de canal, conocido
como profundidad. Para una imagen de color RGB, la dimensión del eje de profundidad es
3, pues la imagen tiene tres canales: Rojo, verde y azul (RGB)[54]

Figura 1-16: kernel[52]

El kernel toma inicialmente valores aleatorios entre [−∞, ∞], pero lo aconsejable es hacerlo
en un rango entre [-5. 5], para que la red no tarde tanto en el proceso de aprendizaje, después
estos se van ajustando mediante backpropagation.

A medida que se va desplazando el kernel y se va obteniendo una “nueva imagen” filtrada


por el kernel. En esta primer convolución y si aplicamos por ejemplo un filtro de 32, es
como si obtuviéramos 32 “imágenes filtradas nuevas”. Estas imágenes nuevas lo que están
“dibujando” son ciertas caracterı́sticas de la imagen original. Esto ayudará en el futuro a
poder distinguir un objeto de otro [5]. Después que la imagen realiza una convolución con
un kernel, aplica la función de activación.
24 1 Marco de referencia

Pooling
Ahora viene un paso en el que se reducirá la cantidad de neuronas antes de hacer una nueva
convolución. Esto se hace ya que al tener una imagen de 60x60x3, es decir, una imagen de
60 de ancho y alto que es a color, se tendrı́a como entrada un total de 10.800 neuronas,
después de la primer convolución, se tendrán por ejemplo 32 filtros, esto significa un total de
60x60x3x32= 345.600 neuronas, si se llegara a hacer una convolución a partir de esta capa, el
número de neuronas de la siguiente capa serı́a enorme, lo que implica mayor procesamiento.
Para reducir el tamaño de la próxima capa se hace un proceso de pooling en el que se reduce
el tamaño de las imágenes filtradas, pero en donde deberán prevalecer las caracterı́sticas
más importantes que detectó cada filtro. Hay diferentes tipos de pooling, entre estos el más
utilizado se plasma en la figura 1-29 el Max pooling.

Figura 1-17: Max Pooling

Suponiendo que usaremos un Max pooling de tamaño 2x2. Esto quiere decir que recorreremos
cada una de nuestras 32 imágenes de caracterı́sticas obtenidas anteriormente de 60x60px de
izquierda a derecha, arriba a abajo, pero en vez de tomar de a 1 pixel, se tomarán de 2x2 (2
de alto por 2 de ancho = 4 pixeles) y se irá preservando el valor “más alto” de entre esos 4
pixeles (por eso lo de “Max”). En este caso, usando 2x2, la imagen resultante es reducida “a
la mitad”y quedará de 3030 pixeles. Luego de este proceso de pooling quedarán 32 imágenes
de 30x30, pasando de haber tenido 345.600 neuronas a 30x30x3x32= 86.400, son bastantes
menos y, en teorı́a-, siguen almacenando la información más importante para detectar ca-
racterı́sticas deseadas.

Red Neuronal Tradicional


La última capa a la que se le aplica Max Pooling se dice que es “tridimensional” por tomar
la forma, por ejemplo, 15x15x128 (alto,ancho,profundidad) y la “aplanamos”, esto es que
deja de ser tridimensional, y pasa a ser una capa de neuronas “tradicionales”.
Entonces, a esta nueva capa oculta “tradicional”, se le aplica una función llamada Softmax
que conecta contra la capa de salida final que tendrá la cantidad de neuronas correspondientes
con las clases que estamos clasificando. Si clasificamos viviendas (VSS) y lotes, serán 2
neuronas. Y ası́ queda la estructura final de una CNN.
1.3 Marco teórico 25

Figura 1-18: Arquitectura de una CNN[52]

Arquitecturas de CNN

Existen modelos pre-entrenados como la red VGG, introducida por Karen Simonyan, An-
drew Zisserman en 2015, con su publicación Very Deep Comvolutional Networks For Large-
Scale Image Recognition[22].

Figura 1-19: Arquitectura de red VGG16

En ese trabajo, investigaron el efecto de la profundidad de la red convolucional sobre su


precisión en el ajuste de reconocimiento de imagen a gran escala. Su contribución principal
fue una evaluación exhaustiva de las redes más profundas utilizando una arquitectura con
filtros de convolución de un tamaño muy pequeño (3x3 ), lo que demuestra que una mejora
significativa en las configuraciones de la técnica anterior se puede lograr empujando la pro-
fundidad a 16 o 19 capas. Estos hallazgos fueron la base de ImageNet (2014).
26 1 Marco de referencia

AlexNet es el nombre de otra CNN, escrita originalmente con CUDA para funcionar con
soporte GPU, que compitió en el desafı́o de reconocimiento de gran escala ImageNet [28].
AlexNet contenı́a ocho capas: las primeras cinco fueron capas convolucionales y las tres
últimas fueron capas conectadas por completo.

Figura 1-20: Arquitectura de red AlexNet [28]

El ganador del concurso ILSVRC 2014 fue GoogleNet (a.k.a. Inception V1) de Google.
¡Logró una tasa de error top-5 de 6.67 %! Este fue un desempeño muy cercano al nivel hu-
mano que los organizadores del desafı́o se vieron obligados a evaluar. Resulta que, en realidad,
esto era bastante difı́cil de realizar y requerı́a algún entrenamiento humano para poder supe-
rar la precisión de GoogLeNets. Después de unos dı́as de entrenamiento, el experto humano
(Andrej Karpathy) logró una tasa de error entre los 5 primeros del 5,1 % (modelo único) y
el 3,6 % (conjunto).

La red utilizó una CNN inspirada en LeNet, pero implementó un elemento novedoso que se
denomina módulo de inicio. Se utilizó la normalización por lotes, distorsiones de imagen y
RMSprop. Este módulo se basa en varias convoluciones muy pequeñas para reducir drásti-
camente el número de parámetros. Su arquitectura consistı́a en una CNN de 22 capas de
profundidad, pero redujo el número de parámetros de 60 millones (AlexNet) a 4 millones[19].
1.3 Marco teórico 27

Figura 1-21: Encarnación GoogLeNet de la arquitectura Inception [19]


28 1 Marco de referencia

Figura 1-22: Arquitectura de red GoogLeNet [28]

Funciones de activación
Es solo una función que se usa para obtener la salida del nodo. También se conoce como
función de transferencia.
Estas funciones de activación con redes neuronales se utilizan para determinar la salida de la
red neuronal, como sı́ o no. Mapea los valores resultantes entre [0,1] o [-1,1], etc. (dependiendo
de la función).
Las funciones de activación se pueden dividir básicamente en 2 tipos:

Función de activación lineal

Funciones de activación no lineales

Función de paso
Para comprender lo que son las funciones de activación es necesario saber lo que hace una
neurona artificial, que en pocas palabras, calcula una ”suma ponderada”de su entrada, agrega
un sesgo y luego decide si debe ”dispararse.o no (sı́, claro, una función de activación hace
esto, pero vamos con el flujo por un momento). Ası́ que consideremos una neurona:
P
y = (weight ∗ input) + bias

El valor de Y puede ser cualquier cosa que va desde [−∞, +∞]. La neurona realmente no
conoce los lı́mites del valor.

Función de paso
Lo primero que se planeta es hacer una función de activación basada en un umbral. Si
1.3 Marco teórico 29

el valor de Y está por encima de un cierto valor, declararlo activado. Si es menor que el
umbral, entonces no. Se deciden agregar “funciones de activación”para verificar el valor de
Y producido por una neurona y decidir si las conexiones externas deben considerar esta
neurona como “activada.o no.

Función de activación A = activada, si Y > umbral, de lo contrario no.


Alternativamente, A = 1, si Y >umbral, de lo contrario 0.

Lo anteriormente mencionado es una “función escalonada”, consulte la figura 1-35.

Figura 1-23: Función binaria[61]

Ası́ que esto hace una función de activación para una neurona. Sin embargo, hay ciertos
inconvenientes con esto.
Supongamos que está creando un clasificador binario. Algo que deberı́a decir “sı́.o “no”(activar
o desactivar). Una Función de Paso podrı́a hacer esto, diga un 1 o un 0. Ahora, se plantea el
caso de uso en el que desearı́a que varias neuronas de este tipo estuvieran conectadas para
generar más clases. Clase 1, clase 2, clase 3, etc. Si se llegara a activar más de una neurona,
todas las neuronas emitirán un 1 (desde la función de paso).

Lo deseado serı́a que la red activara solo 1 neurona y que otras fueran 0, solo entonces
podrı́a decir que clasificó correctamente o identificó la clase. Esto es más difı́cil de entrenar
y converger de esta manera. Para este caso es mejor que la activación no sea binaria y
en su lugar fuera “50 % activado.o “20 % activado ası́ sucesivamente. Y luego, si más de
2

1 neurona se activa, se lograrı́a encontrar qué neurona tiene la “activación más alta ası́ 2

sucesivamente[61].
También en este caso, si más de 1 neurona dice “100 % activada”, el problema aún persiste.
Ya que hay valores de activación intermedios para la salida, el aprendizaje puede ser más
suave y más fácil (menos confuso) y las posibilidades de que más de 1 neurona se active al
100 % es menor cuando se compara con la función de pasos durante el entrenamiento.
30 1 Marco de referencia

Para esto se necesita algo que nos de valores de activación intermedios (analógicos) en lugar
de decir “activado.o no (binario).

Función lineal

A = cX

Es una función de lı́nea recta donde la activación es proporcional a la entrada (que es la suma
ponderada de la neurona). De esta manera, proporciona un rango de activaciones, por lo que
no es una activación binaria. Definitivamente, es posible conectar algunas neuronas juntas
y si más de 1 se dispara, se toma el máximo (o softmax) y decidir con base a eso. Aunque
esta función también tiene un inconveniente, el descenso de gradiente para el entrenamiento,
observarı́a que para esta función, la derivada es una constante.
A = cX, derivado con respecto a x es c. Eso significa que el gradiente no tiene relación con
X. Es un gradiente constante y el descenso estará en un gradiente constante. Si hay un error
en la predicción, los cambios realizados por la propagación hacia atrás son constantes y no
dependen del cambio en la entrada delta (x)[61].
También hay otro problema. En las capas conectada, cada capa es activada por una función
lineal. Esa activación, a su vez, pasa al siguiente nivel como entrada y la segunda capa
calcula la suma ponderada de esa entrada y, a su vez, se activa basándose en otra función
de activación lineal.
Sin importar la cantidad de capas, si todas son de naturaleza lineal, la función de activación
final de la última capa no es más que una función lineal de la entrada de la primera capa. Eso
significa que estas capas pueden ser reemplazadas por una sola capa, ası́ que, sin importar
cómo se apilen, toda la red sigue siendo equivalente a una sola capa con activación lineal
(una combinación de funciones lineales de manera lineal es otra función lineal).
Este comportamiento se puede analizar en PlayGround de TensorFlow5 , que es una aplicación
web de visualización interactiva que permite simular redes neuronales simples que se ejecutan
el nuestro navegador, y ver los resultados en tiempo real.
Esta herramienta nos ofrece cuatro tipos de datos (Gaussiano, circulo, exclusive OR y espi-
ral). La idea es probar diferentes parámetros y analizar el comportamiento de la red.

Para ejemplificar el problema anteriormente respecto a las funciones lineales, se realizó el


modelo y se tomaron como datos los distribuidos en cı́rculo. En la siguiente figura podemos
observar la aplicación mostrando los datos en forma de circulo.

5
Consulte: https://playground.tensorflow.org
1.3 Marco teórico 31

Figura 1-24: Datos distribuidos en forma de circulo, Playground Tensorflow

Ahora veamos el comportamiento del modelo con una capa oculta y que tiene una sola
neurona usando la función de activación linear .

Figura 1-25: Modelo clasificador de una sola capa oculta con una sola neurona y función
de activación lineal, Playground Tensorflow

Como se puede observar, una sola neurona con función de activación lineal no es suficiente
para lograr que los datos se agrupen en grupos diferentes.
32 1 Marco de referencia

Ahora veamos qué pasa cuando se le agregan más capas ocultas al modelo anterior y más
neuronas a cada capa:

Figura 1-26: Modelo clasificador de varias capas ocultas con varias neuronas y función de
activación lineal, Playground Tensorflow

En conclusión una serie de capas ocultas con muchas neuronas en ellas, es equivalente a una
sola neurona cuando se usa la función de activación lineal. esto pasa porque las neurona
no añaden ninguna no linealidad al modelo, simplemente colapsan las señales de entrada y
simplemente hacen una combinación lineal lo que genera un plano. Entonces, ası́ se agreguen
muchas capas ocultas y a estas capas se le agreguen muchas neuronas, la combinación lineal
de todas las combinaciones lineales que se producen en todas las capas ocultas es el equi-
valente a una sola neurona, por eso vemos en los modelos de las figuras 2-15 y 2-16 que a
pesar de su diferencia en el modelo, producen el mismo resultado y ninguno logra solucionar
el problema.

Función sigmoidea
La razón principal por la que se usa la función sigmoidea es porque existe entre [0 a 1].
Por lo tanto, se utiliza especialmente para los modelos en los que tenemos que predecir la
probabilidad como una salida. Dado que la probabilidad de que algo exista solo entre el
rango de 0 y 1, sigmoidea es la opción correcta.

1
A= 1+e−x
1.3 Marco teórico 33

Figura 1-27: Función sigmoidea[61]

Como se puede observar la ecuación y su representación gráfica en la figura 2-38 esta es de


naturaleza no lineal. Las combinaciones de esta función también son no lineales. Con esta
función de activación es posible apilar capas.
Si se observa, entre los valores de X[-2, 2], los valores de Y son muy elevados. Lo que significa
que cualquier pequeño cambio en los valores de X en esa región hará que los valores de Y
cambien significativamente. Eso significa que esta función tiene una tendencia a llevar los
valores Y a cualquiera de los extremos de la curva.

Parece que es bueno para un clasificador considerando su propiedad, tiende a llevar las
activaciones a ambos lados de la curva (por encima de x = 2 y por debajo de x = -2, por
ejemplo). Haciendo distinciones claras en la predicción[61].
Otra ventaja de esta función de activación es que, a diferencia de la función lineal, la salida
de la función de activación siempre estará en el rango (0,1) en comparación con (-inf, inf)
de la función lineal. Ası́ que se tienen las activaciones ligadas en un rango.
Las funciones sigmoideas son una de las funciones de activación más utilizadas en la actua-
lidad. Aunque también tienen un inconveniente, si observa, hacia cualquier extremo de la
función sigmoidea, los valores de Y tienden a responder mucho menos a los cambios en X,
esto significa que el gradiente en esa región será pequeño. Esto da lugar a un problema de
“gradientes de fuga”.

El gradiente es pequeño o se ha desvanecido, no puede hacer un cambio significativo debido


al valor extremadamente pequeño. La red se niega a aprender más o es drásticamente lenta
(dependiendo del caso de uso y hasta que el gradiente / cálculo se vea afectado por los lı́mites
de valor de punto flotante). Hay formas de solucionar este problema y sigmoid sigue siendo
muy popular en los problemas de clasificación[61].

Ahora veamos el mismo ejemplo de la función de activación lineal, en PlayGround creamos un


modelo de una capa oculta y una neurona, pero esta vez con función de activación Sigmoid :
34 1 Marco de referencia

Figura 1-28: Modelo clasificador de una capa oculta y una neurona con función de activa-
ción sigmoid[61]

Evidentemente un modelo de clasificación compuesto por una sola neurona y con función de
activación sigmoid no soluciona el problema de agrupación. Entonces agregamos más capas
ocultas y más neuronas y obtuvimos el siguiente resultado:

Figura 1-29: Modelo clasificador de una capa oculta y tres neuronas con función de acti-
vación sigmoid[61]
1.3 Marco teórico 35

Vemos que con solo agregar 3 neuronas a una capa oculta de un modelo de clasificación con
función de activación sigmoid, se logra trazar la linea fronteriza entre ambos grupos de datos.

Función Tanh

Figura 1-30: Función tanh[61]

Otra función de activación que se utiliza es la función tanh. Esta es una función sigmoidea
escalada, tiene caracterı́sticas similares a la función sigmoid discutidos anteriormente. Es
de naturaleza no lineal, esto significa que podemos apilar capas. Está limitado a un rango
(-1, 1), por lo que no hay preocupaciones de que las activaciones exploten. Un punto a
mencionar es que el gradiente es más fuerte para tanh que para sigmoide (los derivados
son más pronunciados). La decisión entre el sigmoide o el tanh dependerá del requisito de
gradiente de fuerza. Al igual que sigmoide, Tanh también tiene el problema de la degradación
de la desaparición. Tanh es también una función de activación muy popular y ampliamente
utilizada[61].

2
f (x) = tanh(x) = 1+e−2x −1

ReLu (Función de Activación Lineal Rectificada)


Más tarde, viene la función ReLu,

A(x) = max(0, x)
36 1 Marco de referencia

Figura 1-31: Función tanh[61]

La función ReLu es como se muestra en la figura 1-43. Da una salida x, si x es positiva y 0


en caso contrario.

A simple vista, esto parecerı́a tener los mismos problemas de función lineal, ya que es lineal
en el eje positivo. En primer lugar, ReLu es de naturaleza no lineal, por tanto las combi-
naciones de ReLu tampoco son lineales, ası́ que esto significa que podemos apilar capas. El
rango de ReLu es [0, +∞). Esto significa que puede explotar la activación. Otro punto a
tener en cuenta es la escasez de la activación. Si se tiene una gran red neuronal con muchas
neuronas, el uso de un sigmoide o tanh hará que casi todas las neuronas se activen de forma
análoga, eso significa que casi todas las activaciones se procesarán para describir la salida de
una red. En otras palabras, la activación es densa. Esto es costoso, lo ideal serı́a que algunas
neuronas de la red no se activen y, por lo tanto, hagan que las activaciones sean dispersas y
eficientes[61].

ReLu nos da este beneficio. Si se tiene una red con pesos inicializados aleatorios (o normali-
zados) y casi el 50 % de la red produce una activación de 0 debido a la caracterı́stica de ReLu
(salida 0 para valores negativos de x). Esto significa que se están disparando menos neuronas
(activación dispersa) y la red es más ligera. Aunque ReLu también tiene su inconveniente,
debido a la lı́nea horizontal en ReLu (para X negativo), el gradiente puede ir hacia 0. Para
las activaciones en esa región de ReLu, el gradiente será 0 debido a que los pesos no se ajus-
tarán durante el descenso. Eso significa que las neuronas que entran en ese estado dejarán de
responder a las variaciones en el error/entrada (simplemente porque el gradiente es 0, nada
cambia). Esto se llama problema ReLu moribundo. Este problema puede causar que varias
neuronas simplemente mueran y no respondan, lo que hace que una parte sustancial de la
red sea pasiva. Hay variaciones en ReLu para mitigar este problema simplemente haciendo
que la lı́nea horizontal sea un componente no horizontal. por ejemplo, y = 0.01x para x ¡0
hará que sea una lı́nea ligeramente inclinada en lugar de una lı́nea horizontal. Esto es fugas
1.3 Marco teórico 37

ReLu. También hay otras variaciones. La idea principal es dejar que el gradiente no sea cero
y recuperarse durante el entrenamiento eventualmente[61].

ReLu es menos costoso computacionalmente que tanh y sigmoide porque involucra operacio-
nes matemáticas más simples. Ese es un buen punto a considerar cuando estamos diseñando
redes neuronales profundas.

Figura 1-32: Modelo clasificados con una capa oculta y una neurona con activación
ReLu[61]

Aplicando el mismo ejemplo que en la función de activación lineal y sigmoid, se diseñó un


modelo de clasificación con una sola capa oculta y una neurona, pero esta vez con función
de activación ReLu:
Obviamente una sola neurona no es capaz de solucionar el problema de agrupación, porque
la información se concentrada en esa única neurona, pero luego de esa neurona a la neurona
de salida no se está generando ninguna manipulación, sigue siendo como trabajar con una
única capa.
A continuación se tiene el mismo modelo de clasificación anterior, pero esta vez con tres
neuronas, Como se puede observar en la figura 1-45, al agregar una tercera neurona al
modelo ya es posible trazar la frontera de separación entre los grupos de datos.
38 1 Marco de referencia

Figura 1-33: Modelo clasificados con una capa oculta y una neurona con activación
ReLu[61]

Softmax
La función Softmax calcula la distribución de probabilidades del evento sobre ñéventos dife-
rentes. En términos generales, esta función calculará las probabilidades de cada clase objetivo
sobre todas las clases objetivo posibles. Más tarde, las probabilidades calculadas serán útiles
para determinar la clase objetivo para las entradas dadas.

La principal ventaja de usar Softmax es el rango de probabilidades de salida. El rango será


de 0 a 1 , y la suma de todas las probabilidades será igual a uno . Si la función softmax
utilizada para el modelo de clasificación múltiple devuelve las probabilidades de cada clase
y la clase objetivo tendrá una probabilidad alta.
La fórmula calcula la exponencial (e-potencia) del valor de entrada dado y la suma de los
valores exponenciales de todos los valores en las entradas. Luego, la relación de la exponen-
cial del valor de entrada y la suma de los valores exponenciales es la salida de la función
Softmax[40].

A continuación se presenta la figura 1-46 donde se evidencia una comparativa entre las
funciones Softmax y Sigmoid.
1.3 Marco teórico 39

Figura 1-34: Softmax vs Sigmoid

Dropout

Las redes neuronales profundas contienen múltiples capas ocultas no lineales, lo que las
convierte en modelos muy expresivos que pueden aprender relaciones muy complicadas entre
sus entradas y salidas. Sin embargo, con datos de entrenamiento limitados, muchas de estas
relaciones complejas serán el resultado del ruido de muestreo, por lo que existirán en el
conjunto de entrenamiento pero no en datos de prueba reales, incluso si se extraen de la
misma distribución. Esto conduce al sobreajuste y se han desarrollado muchos métodos
para reducirlo. Estos incluyen detener el entrenamiento tan pronto como el rendimiento en
un conjunto de validación empiece a empeorar [53].

Figura 1-35: Modelo neuronal de Dropout [53]

A la izquierda tenemos una red neuronal estándar con 2 capas oculta y a la derecha un
ejemplo de una red reducida producida mediante la aplicación de Dropout a la red de la
40 1 Marco de referencia

izquierda. Se han eliminado unidades cruzadas.

Dropout es una técnica que aborda estos dos problemas: Previene el sobreajuste y proporcio-
na una forma de combinar aproximadamente de manera exponencial muchas arquitecturas de
redes neuronales diferentes de manera eficiente. El término ”Dropout”se refiere a abandonar
unidades (ocultas y visibles) en una red neuronal. Al abandonar una unidad, nos referimos a
su eliminación temporal de la red, junto con todas las conexiones entrantes y salientes, como
se muestra en la siguiente figura. La elección de qué unidades eliminar es aleatoria. En el
caso más simple, cada unidad se retiene con una probabilidad fija p independiente de otras
unidades, donde p puede elegirse utilizando un conjunto de validación o simplemente puede
establecerse en 0.5, lo que parece ser casi óptimo para una amplia gama de redes y Tareas.
Sin embargo, para las unidades de entrada, la probabilidad óptima de retención suele ser
más cercana a 1 que a 0.5 [53].

Figura 1-36: Neuronas con Dropout[53]

A la izquierda se tiene una unidad en tiempo de entrenamiento que está presente con pro-
babilidad p y está conectada a unidades en la siguiente capa con pesos w. A la derecha está
en el momento de la prueba, la unidad siempre está presente y los pesos se multiplican por
p. La salida en el momento de la prueba es la misma que la salida esperada en tiempo de
entrenamiento.[53].

Aplicar Dropout a una red neuronal equivale a muestrear una red “reducida” de ella. La red
reducida consta de todas las unidades que sobrevivieron a la eliminación. Una red neuronal
con n unidades, puede verse como una colección de 2n posibles redes neuronales adelgaza-
das. Todas estas redes comparten ponderaciones, de modo que el número total de parámetros
sigue siendo 0 (n2), o menos. Para cada presentación de cada caso de capacitación, se mues-
trea y entrena una nueva red reducida. Por lo tanto, la capacitación de una red neuronal con
abandono se puede ver como una colección de 2n redes reducidas con un amplio intercambio
de peso, donde cada red adelgazada se entrena muy rara vez, si es que lo hace [53].
La idea del Dropout no se limita a alimentar las redes neuronales. Se puede aplicar de manera
más general a modelos gráficos como las máquinas Boltzmann6 .
6
La Máquina de Boltzmann es una red neuronal recurrente estocástica que representa la información a
1.3 Marco teórico 41

Descripción del modelo


Esta sección describe el modelo de red neuronal Dropout. Considere una red neuronal con
L capas ocultas. Sea l{1, ., ., ., L} indexa las capas ocultas de la red. Sea z (l) el vector de
entradas en la capa l, y (l) el vector de salidas de la capa l (y (0) = x es la entrada).w(l) y b(l)
son los pesos y sesgos en la capa l. La operación de avance de una red neuronal estándar se
puede describir como (para l{1, ., ., ., L − 1} y cualquier unidad oculta i):
(l+1) (l+1) (l+1)
zi = wi + bi ,

(l+1) (l+1)
yi = f (zi )

1
donde f es cualquier función de activación, por ejemplo, f (x) = (1+e(−x) )
, con el Dropout, la
operación de avance se convierte en:

(l)
rj ∼ Bernoulli(p),

ye(l) = r(l) ∗ y (l) ,

(l+1) (l+1) l (1+l)


zi = wi ye + bi ,

(l+1) (l+1)
yi = f (zi )

Figura 1-37: Comparación de las operaciones básicas de una red estándar y de Dropout[33]
partir de una distribución de probabilidad[33]
42 1 Marco de referencia

Aprendizaje

El aprendizaje es la parte más importante de una red neuronal artificial. El esquema de


aprendizaje de una red es lo que determina el tipo de problemas que podrá resolver. La
capacidad de una red para solucionar un problema estará ligado de forma fundamental al tipo
de ejemplos de que dispone el modelo. Recordemos que las RNA son sistemas de aprendizaje
basados en ejemplos. Estos ejemplos deben poseer las siguientes caracterı́sticas[39]:

Ser significativo: Esto significa que debe existir un numero suficiente de ejemplos.

Ser representativo: Los componentes del conjunto de aprendizaje deberı́an ser diversos.

El aprendizaje de una red neuronal consiste en la determinación de los valores precisos de


los pesos para todas sus conexiones, que la capacite para resolver el problema de manera
eficiente.
Dependiendo del esquema de aprendizaje y del problema a resolver, se tienen tres tipos de
esquemas de aprendizaje:

Aprendizaje supervisado: En este tipo de esquema, los datos del conjunto de apren-
dizaje tienen dos tipos de atributos: Los datos y cierta información relativa a la solución
del problema.

Aprendizaje no supervisado: En este aprendizaje los datos del conjunto de apren-


dizaje solo tienen información de los ejemplos, y nada permite guiar en el proceso de
aprendizaje

Aprendizaje por refuerzo: Este tipo de aprendizaje es una variante del aprendizaje
supervisado en el que no se dispone de información concreta del error que llegue a tener
la red neuronal para cada ejemplo de aprendizaje, sino que se determina si la salida
producida para dicho patrón es o no adecuada.

Figura 1-38: Aprendizaje supervisado[39]


1.3 Marco teórico 43

Figura 1-39: Aprendizaje no supervisado[39]

En la figura 1-52 se puede visualizar mejor el tema de las redes neuronales mencionado hasta
ahora:

Figura 1-40: Redes Neuronales Artificiales

Para determinar si la red neural artificial produce salidas acertadas, se divide el conjunto de
entrenamiento en dos conjuntos que se llamarán: entrenamiento y validación. El conjunto d
entrenamiento se usa para aprender los valores de los pesos, la diferencia es que en lugar de
calcular el error en el conjunto de entrenamiento, se utiliza el de validación. Si el error sobre
44 1 Marco de referencia

el conjunto de validación es pequeño, entonces se garantiza la capacidad de generalización


de la red neuronal.
En la figura 1-53 se muestra una tabla comparativa de los tipos de clasificadores supervisado
y no supervisado:

Figura 1-41: Comparación de clasificación supervisada y no supervisada

Funciones de pérdida
Luego de inicializar los pesos se procede a elegir una loss function o función de pérdida, la
cual se elige de acuerdo al problema, esta permite hacer la evaluación al modelo, estimar la
pérdida e identificar vulnerabilidades para mejora y minimización de pérdida de precisión.
Entre las funciones de perdida se encuentran las de clasificación binaria, de regresión y las
de clasificación multi-clase.

Funciones de pérdida de clasificación binaria


Son problemas de modelación predictiva en los que se asigna una de dos etiquetas a los
ejemplos. Para la solución del problema se busca la predicción de una valor de 0 o 1
para las clases, generalmente se espera que la predicción de la probabilidad del ejemplo
sea el valor de la clase 1.
• Pérdida de bisagra
Se considera una alternativa para la entropı́a cruzada, su uso principalmente es el
trabajo modelos de Support Vector Machine (SVM).Se utiliza con la clasificación
binaria donde los valores objetivo están en el conjunto -1, 1. La función asigna más
errores en cuanto haya diferencia entre valores de clase previstos y reales. Para
utilizar está función se modifican las variables para que estén dentro del rango
permitido y se utiliza la palabra ”hinge”que significa bisagra en inglés, para la
compilación y ejecución de esta.
• Pérdida de bisagra cuadrada
Calcula el cuadrado de la pérdida de bisagra convencional, el número asignado a
las variables debe estar entre -1, 1. Aporta en cuanto a la facilidad del trabajo
numérico y como efecto de suavizar la superficie de función de error. Las variables
1.3 Marco teórico 45

se modifican para que estén dentro del rango exigido, para utilizarlo se debe tener
una capa de salida de un solo nodo, una activación de tangente hiperbólica que
genere valores continuos entre [-1,1].
• Pérdida de entropı́a cruzada binaria
Es la función predeterminada para problemas de clasificación binaria, el rango
de valores de destino es en el conjunto 0, 1. Esta función busca que el resultado
de la entropı́a cruzada sea igual a cero, a partir de las diferencia promedio entre
las distribuciones (real y pronosticada), para acertar en la predicción de la clase
1. Esta función de pérdida en Keras se establece como ’binary crossentropy’y
requiere que la capa de salida este en activación ’sigmoide’y tenga un solo nodo
para la predicción.

Funciones de pérdida de regresión


Se utilizan para problemas que impliquen la predicción de un valor real.
• Pérdida de error de cuadrática media
Para los problemas de regresión es la función predeterminada, debido a que está
referenciada como una de las de máxima probabilidad, contando con que la dis-
tribución de la variable es Gaussiana. Es el promedio de diferencias cuadradas
entre los valores reales y los predichos, con un resultado siempre positivo , el
valor esperado es 0.0. En Keras se ubica como ’mseó ’mean squared error’.
• Pérdida de error logarı́tmico cuadrática media
Primero se saca calcula a cada uno de los valores predichos el logaritmo natural,
luego se calcula el error de la media al cuadrado. Está denominado como MSLE
o pérdida de error logarı́tmico cuadrático medio. Dentro de los beneficios que
proporciona está función de pérdida está el efecto de castigo en grandes diferencias
en valores grandes previstos, llega a predecir cantidades directas sin escala, entro
otros. Se sugiere que se utilice con una misma configuración de la capa de salida.
En Keras se ubica como ’mean squared logarithmic error’.
• Pérdida de error de absoluto promedio
Generalmente la variable objetivo cuenta con una distribución de probabilidad
gaussiana, sin embargo esta función nos facilita el manejo de aquellas que con-
tienen valores atı́picos (valores lejos de la media). MAE (Mean Absolute Error)
o pérdida de error absoluto promedio, es la diferencia absoluta entre valores pre-
dichos y reales. En Keras se ubica como ’mean absolute error’, se recomienda
manejar una sola configuración para la capa de salida.

Funciones de pérdida de clasificación multi-clase


Los problemas que se manejan en esta función se determinan porque a las variables se
les asigna una de más de dos clases. Se busca la predicción de un valor entero, cada
clase se asigna con un valor entero único de 0 a n.
46 1 Marco de referencia

• Pérdida de entropı́a cruzada multi-clase


La entropı́a cruzada es una métrica que se usa comúnmente para cuantificar la
diferencia entre dos distribuciones de probabilidad. Esta definida ası́:
P
H(p, q) = − x p(x)logq(x)
Esta definición no es simétrica. P está pensada como una distribución verdadera,
solo parcialmente observada, mientras que Q está pensada como una distribución
innatural obtenida de un modelo estadı́stico construido. En la práctica, debido a
que P no se conoce, la entropı́a cruzada se calcula empı́ricamente a partir de las
observaciones, es decir que se asumen todas las probabilidades con el mismo peso,
es decir, p(x) = N1 , obteniendo:

H(p, q) = − N1 x logq(x)
P

Calcula la puntuación que deriva de la diferencia promedio entre probabilidades


pronosticada y reales, se espera obtener una puntuación de 0.0 valor de entropı́a
cruzada perfecta. Es la función preestablecida que se utiliza para problemas de cla-
sificación de diferentes clases.Se ubica en Keras como ’categorical crossentropy’.
• Pérdida escasa de entropı́a cruzada multi-clase
En Keras ubicamos esta función como ’sparse categorical crossentropy’, se maneja
con codificación en caliente pero a diferencia de la entropı́a cruzada no requiere
que la variable esté codificada antes del entrenamiento, además de hacer el mismo
cálculo, pero sin demasiadas etiquetas. Se requiere que la capa de salida esté
configurada con un nodo para cada clase y una activación ’softmax’, se busca que
cada clase obtenga predicción de su probabilidad.
• Pérdida de divergencia de Kullback Leilber
Usualmente se utiliza para calcular en bits la cantidad de información que se
pierde entre la distribución de probabilidad deseada y la pronosticada. La ca-
pa de salidad debe estar configurada con n nodos, uno por clase y activación
’softmax’para la predicción de la probabilidad. Se ubica en Keras como ’kull-
back leibler divergenceén la función de compile ().

Optimización de RNA

Posterior a hacer la elección y aplicación de función de pérdida, inicia el proceso de aprendi-


zaje y optimización, mediante el cual la red neuronal a partir de los resultados es modificada
con las adecuaciones estimadas, esto con el fin de minimizar la función de pérdida, en caso
de que esta hubiese dado un valor diferente al deseado.

El optimizador es otro de los argumentos que se requieren en el método de compile().Keras


dispone en estos momentos de diferentes optimizadores que pueden usarse: SGD, RMSprop,
1.3 Marco teórico 47

Adagrad, Adadelta, Adam, Adamax, Nadam. Se puede encontrar más detalle de cada uno
de ellos en la documentación de Keras.7

Los algoritmos de optimización ayudan a minimizar (o maximizar)una función de error, que


es simplemente una función matemática que depende de los parámetros internos de apren-
dizaje del modelo que se utilizan para calcular los valores objetivo desde el conjunto de
entrenamiento utilizados en el modelo.
Los parámetros internos de un modelo son de vital importancia en la capacitación eficiente
y efectiva de un modelo y producen resultados precisos. Es por esto que se utilizan varias
estrategias y algoritmos de optimización para actualizar y calcular los valores apropiados y
óptimos de los parámetros de dicho modelo que influyen en el proceso de aprendizaje de un
modelo y en la salida de un modelo.

De forma general, podemos ver el proceso de aprendizaje como un problema de optimización


global donde los parámetros (los pesos y los sesgos) se deben ajustar de tal manera que
la función de pérdida mencionada anteriormente se minimice. En la mayorı́a de los casos,
estos parámetros no se pueden resolver analı́ticamente, pero en general se pueden aproxi-
mar bien con algoritmos de optimización iterativos u optimizadores, como los mencionados
anteriormente[65].
Tipos de algoritmos de optimización Los algoritmos de optimización se dividen en dos cate-
gorı́as[65]:

Algoritmos de optimización de primer orden: estos algoritmos minimizan o ma-


ximizan una función de pérdida utilizando sus valores de gradiente con respecto a los
parámetros. El algoritmo de optimización de primer orden más utilizado es Descenso
de gradiente. La derivada de primer orden nos dice si la función está disminuyendo
o aumentando en un punto en particular. Los derivados de primer orden básicamente
nos dan una lı́nea que es tangencial a un punto en su superficie de error.

Gradiente
Un Gradiente es simplemente un vector que es una generalización multivariable de
un derivado (dy/dx) que es la tasa instantánea de cambio de y con respecto a x. La
diferencia es que para calcular una derivada de una función que depende de más de
una variable o varias variables, un gradiente toma su lugar. Y un gradiente se calcula
utilizando derivadas parciales. También otra diferencia importante entre el Gradiente
y un derivado es que un Gradiente de una función produce un Campo vectorial. Un
gradiente está representado por una matriz jacobiana, que es simplemente una matriz
que consiste en derivadas parciales de primer orden (gradientes). En resumen, una
7
consulte https://keras.io/optimizers/
48 1 Marco de referencia

derivada se define simplemente para una función que depende de variables individuales,
mientras que un gradiente se define para la función que depende de múltiples variables.

Figura 1-42: Gradiente [65]

Algoritmos de optimización de segundo orden: los métodos de segundo orden


utilizan la derivada de segundo orden, que también se llama Hessian para mi-
nimizar o maximizar la función de pérdida. La Hessian es una matriz de derivadas
parciales de segundo orden. Dado que la segunda derivada es costosa de calcular, el
segundo orden no se usa mucho. La derivada de segundo orden nos dice si la primera
derivada está aumentando o disminuyendo, lo que sugiere la curvatura de la función.
La derivada del segundo orden nos proporciona una superficie cuadrática que toca la
superficie. curvatura de la superficie de error.

La figura 1-57 muestra un mapa de la evolución de los optimizadores desde el descenso


del gradiente estocástico (SGD), hasta las variantes de Adam. SGD inicialmente se dividió
en dos tipos principales de optimizadores: aquellos que actúan sobre (i) el componente de
velocidad de aprendizaje, a través del impulso y (ii) el componente de gradiente, a través
de AdaGrad. En la lı́nea de generación, vemos el nacimiento de Adam, una combinación de
impulso y RMSprop, un sucesor de AdaGrad.
1.3 Marco teórico 49

Figura 1-43: Evolución de los optimizadores

La elección del algoritmo de optimización para un modelo de aprendizaje profundo puede


significar la diferencia entre los buenos resultados en minutos, horas y dı́as. El descenso de
gradiente es uno de los algoritmos más populares para realizar la optimización y la forma
más común de optimizar las redes neuronales. Al mismo tiempo, cada biblioteca de Deep
Learning de vanguardia contiene implementaciones de varios algoritmos para optimizar el
descenso de gradiente.

Algoritmos de optimización
SGD o Descenso de gradiente estocástico: Este es uno de los optimizadores
más usados en el Machine Learning y Deep Learning. es uno de los método que más
lleva tiempo en al campo de entrenamiento de redes neuronales. Se prefiere sobre otro
métodos por si eficiencia y su fácil implementación. Debe estar compuesto por dos
matrices, una matriz X, que estará contenida por muestras de formación y una matriz
Y que tenga los valores objetivo para las muestras. Matemáticamente hablamos de un
vector de derivadas parciales, se puede identificar fácilmente que distancia es más corta
y cual más larga[60].

Momentum Adaptable (Adam): Calcula la dirección de descenso usando momen-


tum (similar a MGD) y utiliza una estrategia similar para calcular el tamaño de paso.
Es decir, utiliza momentum para actualizar el paso, lo que evita cambios bruscos en el
paso. Esto lo hace muy estable para su uso en estrategias tipo Gradiente Estocástico
(SGD) donde las muestras pueden provocar cambios considerables en la magnitud del
gradiente, además calcula un paso global en vez de usar un paso para cada variable.
50 1 Marco de referencia

Este optimizador es adecuado en estrategias de entrenamiento estocásticas o por lotes,


como en el caso de Redes Neuronales Profundas (Deep Learning)[44]. Generalmente
las razones de aprendizaje (momentum) son cercanas a 1.

Una iteración del algoritmo Adam se resume en los siguientes pasos[27]:

Sea la siguiente ecuación la i-ésima derivada parcial de la función en el punto actual


xt :

g t = 5f t

Entonces:
1. Calcular la dirección de descenso con momentum

pt = n1 pt−1 + (1 − n1 )g t

donde pt conserva la escala de pt+1 y el gradiente g t 2. Luego, actualizar, a la vez con


momentum, el factor adaptativo del descenso β t

β t = n2 β t−1 + (1 − n2 ) k g t k2

3. Escalar la dirección de descenso y el momentum:

1 t
pb(t) = nt
p

1 t
βbt = βb2t
v

4. Actualizar el punto con la fórmula de paso adaptable

xt+1 = xt − √ αt pc
(t)
β +

Adamax: Es un método de descenso de gradiente estocástico adaptativo y una variante


de Adam basada en la norma del infinito. En contraste con el SGD, Adamax ofrece la
importante ventaja de ser mucho menos sensible a la elección de los hiperparámetros
(por ejemplo, la tasa de aprendizaje). [23].
Dada una estimación estocástica del gradiente de la función de costo, Adamax realiza
una actualización:

p0k + Sk
1.3 Marco teórico 51

donde Sk depende implı́citamente de todo el historial de la optimización hasta el punto


actual. La convención de nomenclatura de NetKet de los parámetros sigue estrictamen-
te la introducida por los autores de Adamax.[27]

1. En la regla de actualización de Adam, la escala del gradiente es inversamente


proporcional a la norma de los gradientes pasados vt−1 y al final del gradiente
actual |gt |2 en lugar de esto, podemos generalizar la actualización a la norma lp
vt = β2p vt−1 + (1 − β2p ) |gt |p
2. poniendo p → ∞
ut = β2∞ vt−1 + (1 − β2∞ |gt |)∞

ut = max(β2 · vt−1, |gt |


Para evitar confusiones con Adam, ut se usa para definir la restricción de norma
infinita en lugar de vt .
3. Finalmente, podemos poner esto en la actualización de Adam reemplazando

η
Θt+1 = Θt − m
ut t
b

Tenga en cuenta que dado que u se basa en la operación máxima, no es posible desviarse
a cero como m y v en Adam, por lo que no necesitamos calcular una corrección de
sesgo para u. Los buenos valores predeterminados son nuevamente η = 0,002, β1 = 0,9
y β2 = 0,999.

En la figura 1-58 se muestran los optimizadores de gradiente descendiente, el año en que se


publicaron los artı́culos y los componentes sobre los que actúan.

Figura 1-44: Optimizadores de descenso de gradiente[23]


52 1 Marco de referencia

Backpropagation
Una red neuronal multicapa de alimentación directa puede representar cualquier función, con
suficientes unidades de neuronas artificiales. Generalmente se aprende mediante un algoritmo
de aprendizaje denominado backpropagation o propagación hacia atrás[5] El backpropaga-
tion utiliza el descenso de gradiente, en los pesos de las conexiones en una red neuronal para
minimizar el error en la salida de la red.
Históricamente, el backpropagation se ha considerado lento, pero los avances recientes en el
poder computacional a través del paralelismo y las unidades de procesamiento de gráficos
(GPU) han renovado el interés en las redes neuronales.

El proceso es similar al de las redes tradicionales en las que se tiene una entrada y una
salida esperada, y mediante el backpropagation se mejora el valor de los pesos de las inter-
conexiones entre capas de neuronas y a medida que se iteran esos pesos se ajustan hasta ser
óptimos. Pero en el caso de la CNN, se debe ajustar el valor de los pesos de los distintos
kernels. Esto es una gran ventaja al momento del aprendizaje pues como se vio cada kernel
es de un tamaño reducido, en nuestro ejemplo en la primer convolución es de tamaño de 33,
eso son solo 9 parámetros que se deben ajustar en la cantidad de filtros utilizados, es decir,
si se usan 32 filtros, será un total de 9x32 = 288 parámetros.
El algoritmo debackpropagation se introdujo originalmente en la década de 1970, pero su im-
portancia no fue totalmente apreciada hasta un famoso artı́culo de 1986 de David Rumelhart,
Geoffrey Hinton y Ronald Williams[12]. En ese documento describe varias redes neuronales
en las que el backpropagation funciona mucho más rápido que los enfoques anteriores de
aprendizaje, lo que hace posible utilizar redes neuronales para resolver problemas que antes
eran insolubles. Hoy en dı́a, el algoritmo de backpropagation es el caballo de batalla del
aprendizaje en redes neuronales.

Para mejorar el desempeño de las CNN, se adicionan otros tipos de capas a las mencio-
nadas anteriormente,como Dropout, bacth normalization y regularization, con el objetivo
de evitar problemas de sobre-entrenamiento en redes profundas. Su función principal es
eliminar temporalmente algunas neuronas especı́ficas de forma aleatoria, rompiendo sus co-
nexiones neuronales durante el entrenamiento. esto previene que las unidades se co-adapten
en exceso[31].
1.4 Librerı́as principales 53

Figura 1-45: Etapas de una CNN [30]

En los últimos años se han desarrollado diversos modelos de redes convolucionales. Para
el sistema de clasificación de VSS desarrollado en este trabajo, utilizaremos la red Alexnet
[54]. Otro método para prevenir el sobre-entrenamiento es adicionar capas de regularización,
estas se encargarán de agregar un término de penalización a los pesos, logrando controlar la
complejidad del modelo. Ejemplo de este modelo de regularización es el de Ridge o weight
decay. La idea de estos modelos es evitar que la red aprenda una regla equivocada, que tenga
más peso que las otras y esto genere una influencia negativa en la decisión final, por esto
se trata de que los pesos tengan niveles similares, ası́ será mucho más fácil que el sistema
busque caracterı́sticas en toda la imagen.

1.4. Librerı́as principales


1.4.1. TensorFlow
Aunque Keras proporciona todas las funcionalidades de propósito general para construir
modelos de Deep Learning, no proporciona tanto como TensorFLow. TensorFlow ofrece ope-
raciones más avanzadas en comparación con Keras, como por ejemplo, que obtienes un
depurador especializado y este proporciona visibilidad de la estructura interna y los estados
de ejecución de los gráficos de TensorFlow.
TensorFlow es un sistema de Deep Learning que funciona a gran escala y en entornos
heterogéneos. Con esta librerı́a se construyen y entrenan redes neuronales para detectar
correlaciones y descifrar patrones análogos al aprendizaje y razonamiento usados por los hu-
manos. Esto es muy conveniente a la hora de cumplir el objetivo de esta aplicación, ya que
lo que se quiere es que la red neuronal aprenda a reconocer patrones de techos de viviendas,
para que ası́ pueda posteriormente identificarlos en el mapa que se le entregue. Varios servi-
cios de Google utilizan TensorFlow en producción, entre otras razones, porque ellos lanzaron
esta librerı́a como un proyecto de código abierto que se ha utilizado ampliamente para la
54 1 Marco de referencia

investigación del Machine Learning[43].

TensorBoard

Es una herramienta que ofrece TensorFlow para visualizar el aprendizaje, como los cálculos
que se realizan pueden ser complejos y confusos (en el entrenamiento de una red neuronal
profunda masiva), para facilitar la comprensión, la depuración y la optimización de los
programas esta aplicación incluye un conjunto de herramientas de visualización llamadas
TensorBoard. Se utiliza para visualizar su gráficos, trazar métricas cuantitativas sobre la
ejecución de gráficos y mostrar datos adicionales como las imágenes que pasan a través de
él.

Para su funcionamiento se requiere instalar TensorFlow, este ya trae TensorBoard, este fun-
ciona al leer los eventos declarados en el tensor. Luego de crear el gráfico a trabajar en
TensorFlow se recopila datos de resumen y se deciden los nodos que contienen las opera-
ciones con la anotación tf.summary más un tag que indica su tipo como scalar o histogram
para visualizar las distribuciones de activaciones que salen de una capa en particular, o la
distribución de gradientes o pesos. Las operaciones no hacen nada hasta que se ejecuten y se
puede hacer uno a uno o todos con el comando tf.summary.merge all, esto genera un archivo
protobuf que se debe escribir en un archivo textittf.summary.FileWriter para luego leerlo y
mostrarlo en la TensorBoard.

Esta herrmienta apunta al directorio de registro del trabajo ”log su uso facilita comprender
2

el aprendizaje al mostrarlo gráficamente, además que se puede personalizar para mostrar lo


que nos interesa. La visualización obtenida podemos observarla en la figura 1-48:
1.4 Librerı́as principales 55

Figura 1-46: TensorBoard [56]

TensorFlow Play Gound

TensorFlow cuenta con una herramienta llamada TensorFlow Playground 8 que es una
aplicación web de visualización interactiva escrita en JavaScript que permite simular redes
neuronales simples que se ejecutan el nuestro navegador, y ver los resultados en tiempo real:

8
consulte: https://playground.tensorflow.org
56 1 Marco de referencia

Figura 1-47: TensorFlow Playground

El naranja y el azul se utilizan en la visualización de formas ligeramente diferentes, pero en


general el naranja muestra valores negativos, mientras que el azul muestra valores positivos.
Los puntos de datos (representados por pequeños cı́rculos) son inicialmente de color naranja
o azul, que corresponden a uno positivo y uno negativo.
En las capas ocultas, las lı́neas están coloreadas por el peso de las conexiones entre las
neuronas. El azul muestra un peso positivo, lo que significa que la red está utilizando esa
salida de la neurona como se indica. Una lı́nea naranja muestra que la red tiene un peso
negativo.
En la capa de salida, los puntos son de color naranja o azul según sus valores originales. El
color de fondo muestra lo que la red predice para un área en particular. La intensidad del
color muestra cuán segura es esa predicción[58].

1.4.2. Flask
Es un microframework open-source que permite en pequeñas lı́neas de código crear aplica-
ciones web, usa el patrón MVC que proporciona una estructura al proyecto y no necesita
una infraestructura con un servidor web, es compatible con Wsig, un protocolo que utiliza
los servidores web (solo de ser necesario). Esta herramienta es donde esta creada la presenta-
ción web con el uso de bootstrap para la ejecución del proyecto, ofrece sugerencias, pero no
impone ninguna dependencia ni diseño del proyecto. Su configuración no requiere de grandes
pasos.
1.4 Librerı́as principales 57

1.4.3. Keras
Keras es una API de alto nivel escrita en Python que corre sobre diferentes motores de Deep
Learning como TensorFlow, CNTK o Theano y corre tanto en CPUs como en GPUs. Esta
API ofrece modelos el los que las capas que se quieran agregar,puedan combinarse según los
requisitos que se tengan. los modelos de Keras son totalmente compatibles con los tensores
de TensorFlow, y como resultado, Keras hace un gran complemento de definición de modelo
para TensorFlow. Además Keras es compatible con Python 2.7 y 3.6.

Trabajar con Keras presenta las siguientes ventajas[26]:

La facilidad de uso. Keras es una API diseñada para seres humanos, no máquinas. Pone
la experiencia del usuario al frente y al centro. Keras sigue las mejores prácticas para
reducir la carga cognitiva: ofrece API consistentes y simples, minimiza el número de
acciones de usuario requeridas para los casos de uso comunes y proporciona comentarios
claros.

Su modularidad. Se entiende por modelo una secuencia o un gráfico de módulos inde-


pendientes, totalmente configurables, que se pueden conectar con la menor cantidad de
restricciones posible. En particular, las capas neuronales, las funciones de costo, los op-
timizadores, los esquemas de inicialización, las funciones de activación y los esquemas
de regularización son módulos independientes que puede combinar para crear nuevos
modelos.

Fácil extensibilidad. Los nuevos módulos son fáciles de agregar (como nuevas clases y
funciones), y los módulos existentes brindan amplios ejemplos. Poder crear fácilmente
nuevos módulos permite una expresividad total, lo que hace que Keras sea adecuado
para la investigación avanzada.

Trabajar con Python. No hay archivos de configuración de modelos separados en un


formato declarativo. Los modelos se describen en el código Python, que es compacto,
más fácil de depurar y permite la extensibilidad.

Keras nos proporciona una serie de modelos pre-entrenados como la red VGG, introducida
por Karen Simonyan, Andrew Zisserman en 2015, con su publicación Very Deep Comvolu-
tional Networks For Large-Scale Image Recognition[22].
En ese trabajo, investigaron el efecto de la profundidad de la red convolucional sobre su
precisión en el ajuste de reconocimiento de imagen a gran escala. Su contribución princi-
pal fue una evaluación exhaustiva de las redes más profundas utilizando una arquitectura
con filtros de convolución de un tamaño muy pequeño (3x3 ), lo que demuestra que una
mejora significativa en las configuraciones de la técnica anterior se puede lograr empujando
la profundidad a 16 o 19 capas. Estos hallazgos fueron la base de ImageNet (2014), donde
su equipo aseguró el primer y segundo por dar buenos resultados con respecto a ubicación
58 1 Marco de referencia

y clasificación. También demostraron que sus representaciones están bien generalizadas a


otros conjuntos de datos, donde logran resultados de vanguardia. Los modelos de redes con-
volucionales VGG16 y VGG19, que son las redes con mejor rendimiento, están a disposición
del público para facilitar una mayor investigación sobre el uso de representaciones visuales
profundas en visión artificial.910

1.5. Viviendas sin servicio en Colombia (VSS)


La población colombiana cuenta con un aproximado de 49’834.240 habitantes de acuerdo
a las estimaciones realizadas por el DANE11 , de estos, 38’295.351 habitantes equivalentes
al 76.85 %, corresponde a población urbana y 11.538.889, es decir, el 23.15 % a población
rural denominada como resto. Dentro de este resto se encuentran los más altos niveles de
Necesidades Básicas Insatisfechas (NBI). Es importante resaltar que la calidad de vida de
la población rural en Colombia, es en donde se encuentran estos altos porcentajes de NBI
[15], debido entre otros, a la carencia o mala prestación de los servicios públicos. Uno de los
servicios fundamentales es el del acceso a la energı́a eléctrica, que puede permitir mejoras
considerables en su calidad de vida. De acuerdo a las estimaciones de la UPME[1] , publicadas
en el Plan Indicativo de Expansión de Cobertura -PIEC- se cuentan con 431.137 Viviendas
Sin Servicio (VSS) en el paı́s. En el caserı́o de Media Luna del departamento de La Guajira,
se cuentan con 179 viviendas en el sector rural que no cuentan con el servicio, sin embargo,
tal como se indicó anteriormente, es un dato estimado, lo que dificulta el planteamiento de
soluciones reales a la problemática energética de esta población.
La estimación realizada por dicha entidad, tal y como indica el PIEC cuenta con datos
provenientes de diferentes fuentes como las electrificadoras, las alcaldı́as y los Planes de
Energización Rural Sostenible -PERS-. Esta información actualmente se encuentra al nivel
de Centro Poblado, en zonas rurales. Con esta información el gobierno estima la cantidad de
recursos necesarios para cumplir con la obligación de garantizar la prestación de los servicios
públicos tal y como lo establece el artı́culo 365 de la constitución12 . Sin embargo, no se ha
9
Para conocer más a cerca del modelo VGG16 consulte: https://keras.io/applications/vgg16
10
Para conocer más a cerca del modelo VGG19 consulte: https://keras.io/applications/vgg19
11
Departamento Administrativo Nacional de Estadı́stica-DANE, Disponible en: http://www.dane.gov.co/,
última fecha de consulta: 10/06/18
12
Artı́culo 365. Los servicios públicos son inherentes a la finalidad social del Estado. Es deber del Estado
asegurar su prestación eficiente a todos los habitantes del territorio nacional. Los servicios públicos estarán
sometidos al régimen jurı́dico que fije la ley, podrán ser prestados por el Estado, directa o indirectamente,
por comunidades organizadas, o por particulares. En todo caso, el Estado mantendrá la regulación, el
control y la vigilancia de dichos servicios. Si por razones de soberanı́a o de interés social, el Estado,
mediante ley aprobada por la mayorı́a de los miembros de una y otra cámara, por iniciativa del Gobierno
decide reservarse determinadas actividades estratégicas o servicios públicos, deberá indemnizar previa
y plenamente a las personas que en virtud de dicha ley, queden privadas del ejercicio de una actividad
1.5 Viviendas sin servicio en Colombia (VSS) 59

podido determinar de una manera juiciosa, el Número de Viviendas Sin Servicio en la zona
rural.

lı́cita.
2 Aplicación

2.1. Preparación del entorno de trabajo

Para la creación de esta aplicación se utilizó un computador Lenovo con sistema operativo
Ubuntu 16.04, esta es una distribución de GNU/Linux versión LTS lanzada el 26 de abril
del 2018. Se seleccionó este sistema operativo, porque es más rápido a la hora de ejecutar
instrucciones de TensorFlow como se afirma en la información proporcionada por la página
oficial de TensorFlow1 . El ordenador cuenta con una memoria RAM de 16GB y una tarjeta
gráfica Nvidia GeForce GTX 1050. Como se vio en la sección 2.3.9, Nvidia lanzó el lenguaje
de programación CUDA para poder programar sus GPU, gracias a esto se comenzaron a
usar chusters de GPU para acelerar aplicaciones numéricas, esto es una ventaja a la hora de
hacer el entrenamiento de CNN debido a Nvidia es compatible con TensorFlow. Esta librerı́a
tiene tanto la versión de la CPU, como la versión de la GPU disponibles y aunque la versión
de la CPU funciona bastante bien, en modelos de Deep Learning se recomienda usar la GPU
para la obtención de resultados en tiempo real o el menor tiempo posible.

Para poder hacer uso de Tensorflow GPU es necesario contar con una GPU compatible, en
la página de Tensorflow 2 se encuentran todas las especificaciones para la instalación de esta
librerı́a junto con una lista de las GPU Nvidia compatibles con esta. Además de Una tarjeta
gráfica Nvidia, es necesario cumplir con los siguientes requisitos:

Linux de 64 bits

Python 2.7

CUDA 9

cuDNN 7

Todas las librerı́as utilizadas para el entrenamiento de las CNN fueron instaladas en un
entorno virtual de python (virtualenv), este es un ambiente creado con el objetivo de aislar
1
https://www.tensorflow.org/, última fecha de revisión: noviembre del 2018
2
www.tensorflow.org/install/gpu
2.2 Conjunto de datos de entrenamiento 61

recursos como librerı́as y entorno de ejecución del sistema principal o de otros entornos
virtuales. Lo anterior significa que en la misma computadora, es posible tener instaladas
múltiples versiones de una misma librerı́a sin crear ningún tipo de conflicto.

2.1.1. Instalación de TensorFlow y Keras

Después de tener CUDA y CuDNN instalados y de haber creado el entorno virtual de python,
se procedió a la instalación de TensorFlow y Keras. Para este proyecto se instalo TensorFlow
versión 1.5.0 por ser compatible con CUDA 9 y cuDNN 7 3 y Keras versión 2.2.4 que es la
más actual hasta la fecha. Cabe mencionar que toda esta instalación se realiza por medio de
comandos desde la consola de python.

En Keras se ensamblan capas para construir modelos. En nuestro caso se usó Keras para
ensamblar las capas convolucionales, de max pooling y capas completamente conectadas que
se encargaron de abstraer y aprender las caracterı́sticas de las imágenes y fueron utilizadas
para el entrenamiento para el modelo.

2.2. Conjunto de datos de entrenamiento

Para que el proceso de aprendizaje de un modelo sea eficaz los conjuntos de entrenamiento
y validación deben contar con las siguientes caracterı́sticas :

El conjunto de validación debe ser independiente del de aprendizaje

El conjunto de validación debe cumplir las propiedades de un conjunto de entrena-


miento.

La división del conjunto de datos en dos conjuntos es una buena idea, pero también se puede
reducir en gran medida las posibilidades de sobreajuste al dividir el conjunto de datos en los
tres subconjuntos que se muestran en los siguientes diagrama:

3
Consulte: https://www.tensorflow.org/install/sourcelinux
62 2 Aplicación

Figura 2-1: Conjunto de entrenamiento[33]

El conjunto de entrenamiento es la información que conoce la red, está formado por: datos de
entrenamiento y datos de validación, el mapa de Media Luna que corresponde el dato
de prueba, este conjunto contiene las imágenes que fueron utilizadas como ejemplos para
que los modelos lograran aprender. Cada subconjunto cuenta con dos etiquetas (también
llamadas clases): VSS y LOTE ; Estas etiquetas corresponden a ejemplos de imágenes de
techos de viviendas y de lotes respectivamente.

Figura 2-2: Conjunto de entrenamiento[33]


2.3 Pre-procesamiento de imágenes 63

Como se muestra en la figura 2-3, el modelo recibe el conjunto de entrenamiento que co-
rresponde a 1365 imágenes (imágenes de viviendas recolectadas una a una de Google) de
entrenamiento que cuentan con las dos clases (VSS y lote) más 482 imágenes (otro paquete
recolectado una a una de Google) de validación que igualmente cuentan con las dos clases.
Eso significa que del total de datos que se tienen para el conjunto de entrenamiento (1847
imágenes), el 73.9 % se usaron como ejemplos para que el modelo aprendiera y el 26.1 % se
usó en el conjunto de validación. Estas cantidades se decidieron enfados en el área de es-
tudio y la clasificación necesaria, pues comprenden un muestreo suficiente para lo requerido.

La cantidad de ejemplos en el conjunto de entrenamiento debe ser alta, en nuestro caso se


tomaron cerca de 2000 imágenes satelitales de zonas rurales de Colombia. Este no es un
número de imágenes en el conjunto fue suficiente para que los modelos fueran capaces de
extraer sus caracterı́sticas y tener un buen aprendizaje.

Las imágenes de techos de viviendas y lotes utilizadas en el conjunto de entrenamiento se


tomaron de otras regiones de Colombia que tienen caracterı́sticas similares a las de Media
Luna por medio de Google Earth y fueron estandarizadas de forma manual con un tamaño
60x60 pixeles cada una (esta proporción se obtuvo del promedio de la dimensión de una
casa en una imagen captada de Google Earth a una altura de 728 metros de altura y una
resolución 4k, datos orientados y relacionados con el área de estudio), esto con el fin de
ayudar a nuestro modelo a ser más preciso a la hora de entrenarse y además facilitar el
pre-procesamiento de datos.

Figura 2-3: Conjunto de entrenamiento

2.3. Pre-procesamiento de imágenes


El pre-procesamiento de imágenes es el conjunto de técnicas que se aplican a las imágenes
digitales con el objetivo de mejorar la calidad o facilitar la búsqueda de información. Para
lograr esto es necesaria la librerı́a ImageDataGenerator que nos proporciona un generador
para cada una de las variables de entrada. En este generador es donde se especifica cómo se
64 2 Aplicación

va a pre-procesar la información, para después hacer la transformación de nuestras imágenes.


Esto se aplica tanto a las variables de entrenamiento como las de validación.
La clase ImageDataGeneration de Keras que es la encargada de ayudar en la parte del
pre-procesamiento de las imágenes que se le van a dar a la Red Neuronal, esta clase es la
que define la configuración para la preparación y el aumento de datos de imagen 4 .
Lo primero que se hizo en el generador fue reescalar la imagen dándole valores al argumento
rescale de ImageDataGenerator. Para esto se tuvo en cuenta que nuestras imágenes
tienen una combinación de tres canales, es decir el modo de color de las imágenes es RGB.
Cada canal corresponde con un color primario: Red (rojo), Green (verde), y Blue (azul). El
modo asigna un valor de intensidad a cada color que oscila entre 0 y 255. De la combinación
surgen hasta 16,7 millones de colores [55].
Entonces, como cada uno de los pixeles tiene un rango de 0 a 255 se hizo el reescalado, ahora
en vez de ir de 0 a 255, todos nuestros valores de pixeles están de 0 a 1, todo esto con el fin
de hacer más eficiente el entrenamiento.
El segundo argumento que se modificó en ImageDataGenerator fue shear range, que es
la intensidad de corte (ángulo de corte en sentido antihorario en grados).

Después se asignó un valor para el argumento zoom range de ImageDataGenerator, con


el objetivo de que le haga zoom a las imágenes de entrada, ya que cuando al modelo se le
pase un mapa, este puede acercar y alejar la imagen para que aprenda a que las imágenes
puede encontrarlas en diferentes tamaños.

Con ImageDataGenerator también podemos invertir las imágenes para que aprenda a dis-
tinguir direccionalidad nuestra Red Neuronal, esto es gracias al argumento horizontal flip.

La diferencia entre el generador para las imágenes de entrenamiento y las de validación, es que
en el generador para las imágenes de validación solo se le modificará el argumento rescale,
ya que cuando se le ingrese el mapa de la región y el modelo comience a hacer el recorri-
do por él, no queremos girar, invertir o hacerle zoom a la imagen, la queremos tal como está.

A continuación, haciendo uso de la función flow from directory de ImageDataGene-


ration se ingresa al directorio donde se encuentran las imagenes para el entrenamien-
to(data entrenamiento), abre todas las carpetas y todas las procesa a una altura y longitud
especı́fica de 60x60 pixeles, como hemos mencionado anteriormente. La función también pro-
cesa las imágenes en un batch size de 32 y se le asignó el tipo de clasificación: categorycal,
pues presenta una amplia ventaja en la clasificación de objetos y dado que lo que hace la
Red Neuronal es clasificar con las categorı́as vss o lote.
El batch size o tamaño de lote en español, define el número de muestras que se propagarán
a través de la red. En nuestro caso tenemos 1365 muestras de entrenamiento (número que
4
https://keras.io/preprocessing/image/. Ultima revisión enero 2019
2.4 Entrenamiento de los modelos CNN y VGG16 65

proporciona la fiabilidad necesaria de entrenamiento) y se desea configurar un batch size


igual a 32. El algoritmo toma las primeras 32 muestras (del 1 al 32) del conjunto de datos
de entrenamiento y entrena a la red. A continuación, toma las segundas 32 muestras (de
33 a 65) y vuelve a entrenar la red. Este procedimiento se realiza hasta que nos hayamos
propagado a través de todas las muestras de la red.
Todo este proceso para generar las imágenes de entrenamiento pre-procesadas, se hace con el
set de datos de imágenes de validación. todo esto se puede observar con mejor detenimiento
en el código fuente.
Ahora las variables imagen entrenamiento e imagen validacion contiene las imágenes
que se usarán en el modelo de red neuronal.

2.4. Entrenamiento de los modelos CNN y VGG16


Para dar solución a el problema planteado en esta tesis, es decir, el encontrar un modelo
que pueda detectar en el mapa de Media Luna Viviendas Sin Servicio y que nos diga qué
cantidad detectó, se experimentó con dos modelos diferentes de CNN. Uno de los modelos
cuenta con 6 capas, mientras que el otro, el modelo pre-entrenado de Keras VGG16, cuenta
con un total de 16 capas como se mencionó en la sección 2.4.2.

Los modelos se entrenaron teniendo en cuenta los siguientes criterios:

1. Para construir nuestra Red Neuronal, utilizamos TensorFlow y Keras (API de redes
neuronales que se ejecuta sobre TensorFlow).

2. Debido a que el modelo necesita reconocer objetos en una imagen satelital es necesario
el uso de Redes Neuronales Convolucionales,debido a que están especializadas en la
detección y categorización de objetos. Para más información consulte la sección 2.3.4.

3. Para que el modelo sea capaz de agrupar el conjunto de datos de entrenamiento de


manera óptima es necesario el uso de una función de activación especializada en esto,
por esta razón se seleccionó ReLu. Como se mencionó en la sección 2.3.3, esta función
desactiva todas las neuronas que tengan un valor negativo y además las neuronas con
valor positivo tiene derivada 1, lo que permite que la red entrene más rápidamente y
evita problemas al ajustar los pesos. La visualización de los resultados de cada función
de activación en Play Ground también influyó en la decisión por este activador.

4. Teniendo en cuenta que la salida que se requiere del modelo es un porcentaje de proba-
bilidad que la imagen a la que le está haciendo la predicción sea VSS o no, es necesario
el uso de la función de activación Softmax, puesto que esta función asigna probabili-
dades decimales a cada clase en un caso de clases múltiples. En nuestro caso, las clases
son VSS y lote. Softmax es un clasificador ubicado al final de la red neuronal que
66 2 Aplicación

hace una regresión logı́stica para regularizar las salidas a valores entre 0 y 1. Para más
información consulte la sección 2.3.3 (Funciones de activación).

5. Se sabe que los algoritmos de optimización más populares en la actualidad son Adam
y sus derivaciones. En este proyecto se compararon los rendimientos de las CNN uti-
lizando tres optimizadores diferentes: Adam, Adamax y Nadam para utilizar el que
mejor resultados daba.

6. Debido al gran numero de casos de éxito para clasificación y detección de objetos en


imágenes y vı́deos del modelo pre-entrenado VGG16, se experimentó con este para dar
solución al problema planteado y comparar los resultados con otra CNN más simple.

2.4.1. Primer modelo: CNN

Entrenamiento

Para el entrenamiento del primer modelo se le asignó el conjunto de datos de entrenamiento,


posteriormente se le hizo el debido pre-procesamiento a las imágenes.

Ya con los datos pre-procesados se comenzó a crear el modelo como una instancia tipo Se-
quential, que es un modelo tipo secuencial que nos proporciona Keras al que se le agregan,
como su nombre lo indica, capas en forma secuencial.

Iniciamos el modelo agregando una capa convolucional, que tiene una profundidad de 32
filtros. Estos filtros son los encargados de identificar bordes, sombras y contrastes en las
imágenes de entrada. Esta capa toma como entrada los pixeles de las imágenes de techos
de viviendas y de lotes del conjunto de entrenamiento, estas imágenes tienen un tamaño
de 60x60px cada una. Esto equivaldrı́a a 3.600 neuronas si fuera una imagen en escala de
grises (un solo color) y requiere un solo canal, pero como las imágenes del conjunto de
entrenamiento son a color, significa que necesitamos tres canales (Red, Green, Blue), esto
da un total de 60x60x3 = 10.800 neuronas de entrada para la primer capa convolucional.
Como esta capa tiene 32 filtro (un filtro es un conjunto de kernels), significa que obtendremos
32 matrices de salida, cada una de 60x60x3 dando un total del 345.600 neuronas para la
primer capa oculta de neuronas.Esto ayudará en el futuro a poder distinguir las VSS.
2.4 Entrenamiento de los modelos CNN y VGG16 67

Figura 2-4: kernel

El kernel toma inicialmente valores aleatorios y se van ajustando mediante backpropagation.

Después de que la imagen realiza una convolución con un kernel aplica la función de acti-
vación, en este caso ReLu, teniendo en cuenta los criterios mencionados con anterioridad.

Figura 2-5: Max pooling de 2x2

La segunda capa del modelo CNN es de max pooling, en esta capa se reduce la cantidad
de neuronas antes de hacer una nueva convolución. Esto se hace para quitarle el número de
conexiones y que no sea tan pesado para la Red Neuronal procesar esta información.
Hay dos tipos de pooling o agrupación:

Max pooling: Pasa filtros de de 2x2px de altura y longitud respectivamente sobre la


imagen. Lo que hace esta función es identificar cuál es el número más grande que tiene
en ese parche, lo toma y lo pasa a una nueva matriz más pequeña,

Average pooling: Es similar al max pooling, solo que en vez de tomar el número más
grande en cada parche, toma el valor promedio de todos los números del parche.

Como a partir de la imagen de VSS de 60x60x3px tenemos una primer capa de entrada de
10.800 neuronas y después de la primer convolución obtenemos una capa oculta de 345.600
neuronas es necesario reducir la cantidad de neuronas antes de hacer una nueva convolución
con max pooling. Si se llegara a realizar una nueva convolución a partir de esta capa oculta
sin la reducción, el número de neuronas de la próxima capa crecerı́a de forma exponencial y
eso implicarı́a mayor procesamiento.
68 2 Aplicación

El max pooling reduce la cantidad de neuronas de la próxima capa, pero deja las carac-
terı́sticas más importantes que detectó cada filtro.
El tamaño del Max pooling es de 2x2. Esto quiere decir que se recorrerá cada una de las 32
imágenes de caracterı́sticas obtenidas anteriormente de 60x60x3px de izquierda a derecha,
arriba a abajo, pero en vez de tomar de a 1 pı́xel, se tomarán de 2x2 (2 de alto por 2 de
ancho = 4 pixeles) y se irá preservando el valor “más alto” de entre esos 4 pixeles (por eso
lo de “Max”). En este caso, usando 2x2, la imagen resultante es reducida “a la mitad”y
quedará de 30x30x3 = 2.700 pixeles. Luego de este proceso de Max Pooling solo quedarán
32 imágenes de 30x30x3px, pasando de haber tenido 345.600 neuronas a 86.400, la cantidad
se redujo de forma considerable, pero siguen almacenando la información más importante
para detectar caracterı́sticas deseadas.
Hasta aquı́ se ha realizado la primer convolución, esta consiste en recibir una imagen como
entrada, se pasa por un conjunto de filtros, se genera un mapa de caracterı́sticas y para
terminar se hace un Max pooling.

Figura 2-6: primera convolución[52]

La primer convolución es capaz de detectar caracterı́sticas primitivas como lineas ó curvas.


A medida se hacen más capas con las convoluciones, los mapas de caracterı́sticas son capaces
de reconocer formas más complejas. En este caso solo se harán dos capas convolucionales,
debido a la simplicidad de las imágenes.
La tercera capa agregada al modelo secuencial es otra capa convolucional, con una pro-
fundidad de 64 filtros cada uno de 3x3px. La cuarta capa es otra de max pooling. Al finalizar
esta segunda convolución se obtendrá una nueva capa oculta con 15x15x3x64=43.200 neu-
ronas.
2.4 Entrenamiento de los modelos CNN y VGG16 69

Figura 2-7: segunda convolución[52]

Para terminar, se toma la última capa oculta a la que se le hizo Max Pooling, que es “tri-
dimensional” por tomar la forma 15x15x64 (alto, ancho, profundidad) y se “aplana”, esto
significa que deja de ser tridimensional, y pasa a ser una capa de neuronas “tradicionales”,
es decir, de una sola dimensión que contiene toda la información de la CNN..Esta capa es
conocida como flatten.

La siguiente es una capa Dense o densa en las que especificamos un número de 256 neu-
ronas y que están conectadas a todas las neuronas de la capa pasada (flatten). En seguida
se agrega un Dropout pasando como parámetro ”0.5”. Esto lo que hará es que apagará el
50 % de las neuronas de la capa Dense en cada paso. Esto se hace para evitar sobreajustar
el modelo, ya que si todo el tiempo, todas las neuronas están activadas puede que la Red
Neuronal aprenda un camino en especı́fico para clasificar las clases. Entonces, si se le dice
que de manera aleatoria en cada paso solo active el 50 % de las 256 neuronas de la capa
densa, va a aprender caminos alternos para clasificar los datos y se queda un modelo que se
adapta mejor a información nueva.

A continuación se agrega otra capa densa, esta vez con 2 neuronas que corresponden al
número de clases que definimos: VSS y LOTE. Otro parámetro que se le da a la función es la
activación tipo softmax, esta lo que hará es decir la probabilidad de que sea cierta etiqueta,
por ejemplo, 95 % de probabilidad de que sea una VSS y un 5 % de que sea lote. Ası́ se puede
70 2 Aplicación

asumir que el de porcentaje de probabilidad más alto, es la clasificación correcta.

Para finalizar se hace uso de la función compile pasándole los parámetros para optimizar el
algoritmo. Le decimos que la función de pérdida, es decir, que el algoritmo vea qué tan bien
o qué tal mal va, va a ser categorical crossentropy.

De manera experimental se utilizaron tres optimizadores en esta CNN, para comparar el ren-
dimiento de cada modelo de aprendizaje y comparar resultados. La comparación se realizó
con los optimizadores Adam, adamax y Nadam. Cada optimizador tiene un learning
reader (lr), que es la taza de aprendizaje que usa el optimizador, esta no fue modificada,
sino que se le dejaron los valores predeterminados como recomiendan Keras en su documen-
tación.5 . Para finalizar, la métrica con la cual se va optimizando es accuracy, es decir el
porcentaje de qué tan bien está aprendiendo la Red Neuronal.

Con esto la Red Neuronal ya está lista, ya tenemos una capa de convolución con activa-
ción ReLu, seguida de un max pooling, seguida de otra capa de convolución, seguida de
otro max pooling; después se aplana toda la información, se envı́a a una capa densa con
256 neuronas, esta capa le manda la información a la siguiente capa que solo va a tener 2
neuronas por cada una de las clases (VSS y LOTE), que tiene una activación de Softmax y
ya sabe cómo va a aprender, va a medir qué tan bien va con categorical crossenttropy,
va a ir optimizándose con Adam, Adamax y Nadam y va a estar intentando mejorar con
accury, es decir, el porcentaje de imágenes que está clasificando bien.

Figura 2-8: Arquitectura de una CNN [52]

En la figura 2-7 se observa un resumen del proceso por el que pasaron las imágenes de entrada
5
Consulte: https://keras.io/optimizers/
2.4 Entrenamiento de los modelos CNN y VGG16 71

en las capas de la CNN. Esta es una visualización obtenida por terminal del resumen de
entrenamiento entregado por la función fit generator.

Figura 2-9: Modelo CNN

Ahora solo falta entrenar la Red Neuronal, para esto se hace uso de la función fit generator
de la clase Convolution2D, a esta función se le pasan el conjunto de entrenamiento, se
especifica el número de pasos de entrenamiento que se van a tener en cada una de las épocas
y el número de pasos de validación. La configuración de los parámetros es la parte más
laboriosa del entrenamiento, ya que hay que hacerlo de forma manual y además confiar un
poco en la intuición. Se probaron varias configuraciones diferentes, con distintas épocas y
pasos de entrenamiento y validación, hasta dar con el más óptimo, esto se facilita un poco
gracias a la función EarlyStopping de Keras. Con esta función es posible monitorizar las
diferentes variables del modelo. La variable que nos interesa monitorizar es la ganancia de
validación, ya que su comportamiento es el indicador de si el aprendizaje de la CNN va
bien o mal. Para tener una buena ganancia de validación es necesario que este método vigile
la variable verificando que esta no deje de crecer y si deja de crecer, entonces detenga el
entrenamiento. La ganancia de validación debe ser lo más alta posible para que el modelo
de entrenamiento sea lo más preciso posible.
Experimentando con diferentes valores para los hiperparámetros del modelo, se llegó a la
conclusión de que el entrenamiento más óptimo requerı́a de ocho épocas de cien pasos en
cada una. Cuando termina el entrenamiento de cada época, el modelo corre cincuenta pasos
de validación y después pasa a la siguiente época.
72 2 Aplicación

La función fit gererator devuelve un objeto tipo History que tiene un registro de valores
de pérdida de entrenamiento y valores de métricas en épocas sucesivas, ası́ como valores de
pérdida de validación y valores de métrica de validación. En la figura 3-8 vemos un ejemplo
de la salida por terminal del modelo CNN entrenado en ocho épocas de cien pasos:

Figura 2-10: Objeto History devuelto por fit generator

Como se evidencia de esta salida, el método llega a un porcentaje de ganancia de 0.9979 %,


lo que es un indicador de que la CNN se entrenó de manera óptima.

La visualización de las variables de salida del modelo no se pueden analizar de manera


tan detallada, esto se debe a la gran cantidad de épocas y pasos tanto de entrenamiento
como validación, para solucionar esto, TensorFlow nos proporciona una herramienta muy
útil a la hora de visualizar las variables de ganancia y pérdida.

A continuación se muestran las gráficas facilitadas por Tensorboard de las ganancias y pérdi-
das del modelo CNN entrenado anteriormente. En las gráficas se pueden observan tres lineas
de colores diferentes, el color azul corresponde al comportamiento del entrenamiento de la
CNN utilizando el optimizador Adam, el naranja corresponde al entrenamiento utilizando
Adamx y el rojo para Nadam. En las gráficas se muestra el entrenamiento durante ocho
épocas de cien pasos cada una.
2.4 Entrenamiento de los modelos CNN y VGG16 73

Figura 2-11: acc

En la figura 2-9 tenemos la representación del porcentaje de ganancia de entrenamiento uti-


lizando los tres optimizadores. El comportamiento de esta variable durante el entrenamiento
en general es bueno con los tres optimizadores, aunque es un poco mejor con Adamax, ob-
teniendo una ganancia de 0.9887 %.
74 2 Aplicación

Figura 2-12: loss

Figura 2-13: val acc


2.4 Entrenamiento de los modelos CNN y VGG16 75

El comportamiento de la perdida de entrenamiento (figura 2-10) también es bueno en gene-


ral con los optimizadores Adam y Adamax, sin embargo el que nos dio la menor pérdida es
Adamax. Por el contrario con el optimizador Nadam el comportamiento de esta variable no
es tan bueno, incluso durante las épocas cuatro y cinco la pérdida sube, lo cual no es buen
indicador.

La gráfica de la figura 2-11 es la que más nos interesa, la ganancia de validación, acá podemos
comprobar que con el optimizador Adamax se obtuvo una mejor ganancia de optimización
con un 0.979 % lo que nos garantiza que el modelo está bien entrenado y será preciso a la hora
de realizar las predicciones. Con el optimizador Adam se obtuvo una ganancia de validación
al llegar la época ocho de 1 %, esta es la ganancia más alta, sin embargo, se puede ver que la
variable bajo durante las épocas dos y cinco, lo que hace pensar que el modelo se sobreajustó
y no será del todo preciso a la hora de hacer predicciones. Con el optimizador Nadam fue el
que peor resultados se obtuvieron, la ganancia de validación se muestra inestable a lo largo
del aprendizaje del modelo aunque al terminar el entrenamiento llegó a una ganancia de
validación de 0.986.

Figura 2-14: val loss

La figura 3-12 corresponde a la pérdida de validación. Nuevamente Adamax muestra los


mejores resultados comparado con Adam y Nadam, este último resultó ser el más inestable
del los tres con subidas importantes durante las épocas 0, 2, 5, 6 y 7. Adam también tuvo
76 2 Aplicación

una pequeña subida en la pérdida de validación en la época 5.

Las gráficas proporcionadas por Tensorboard nos evidencian que el optimizador que mejores
resultados nos dio es: Adamax, ya que con este la evolución de las ganancias y pérdidas
tanto de entrenamiento como de validación fueron muy buenas en comparación a los otros
dos.
En este modelo obtuvimos una ganancia de validación bastante alta, de 99.79 %, lo que indica
que tenemos un buen modelo de entrenamiento. Este fue guardado junto con sus pesos para
la predicción.
En la siguiente imagen se muestra el grafo del modelo cnn:

Figura 2-15: grafo del modelo cnn


2.4 Entrenamiento de los modelos CNN y VGG16 77

Expandiendo los nodos del grafo principal tenemos los subgrafos que correspondes a cada
una de las capas de la red secuencial, como por ejemplo, las capas convolucionales, las de Max
Pooling, las capas densas, etc. A continuación se muestran los subgrafos obtenidos mediante
Tensorboard, desde que entran los datos en la primera capa convolucional hasta la última
capa densa. Se puede entender cómo pasan los datos por medio de cada una de ellas hasta
los nodos auxiliares donde se compila y entrena el modelo.

Figura 2-16: subgrafo conv1 de cnn

.
78 2 Aplicación

Figura 2-17: subgrafo maxpooling de cnn

Figura 2-19: subgrafo flatten de cnn


2.4 Entrenamiento de los modelos CNN y VGG16 79

Figura 2-20: subgrafo dropout y de cnn

Figura 2-21: subgrafo metrics de cnn


80 2 Aplicación

Figura 2-22: nodo auxiliar cnn

2.4.2. Segundo modelo: VGG16

Figura 2-23: modelo VGG16[28]

Entrenamiento

El modelo VGG16 (figura 2-21) es una red pre-entrenada de Keras bastante popular gracias
a su gran éxito en clasificación y detección de objetos en imágenes y videos, fue creada por
2.4 Entrenamiento de los modelos CNN y VGG16 81

Karen Simonyan y Andrew Zisserman en 2015[22]. Este modelo fue entrenado para clasificar
cerca de mil objetos, tiene una arquitectura de Red Neuronal de profundidad de 16 capas,
que emplea la función de activación ReLU y un número de núcleos de convolución 3x3[4].
Keras implementa el esquema arquetı́pico de las redes convolucionales clásicas: una serie de
convolucionces, Max Pooling, capas de activación y finalmente algunas capas de clasificación
(Softmax) completamente conectadas.

Figura 2-24: modelo VGG16 [36]

Para hacer uso del modelo VGG16, es necesaria la librerı́a aplications, esta librerı́a es la que
contiene todos los modelos pre-entrenados que nos ofrece Keras6 .

Una vez cargado el modelo, se modificó para ajustarlo a nuestras necesidades y ası́ aprendie-
ra a clasificar techos de viviendas y lotes. Esto fue considerado conveniente ya que el modelo
VGG16 es más elaborado al tener una gran profundidad de capas, esto quiere decir que con
este modelo se harán muchas más convoluciones que con el primer modelo, en total cinco
convoluciones.

El modelo VGG16 cuenta con 16 capas que harán un total de 5 convoluciones. Al final de
las capas se encuentra una capa densa, que una capa de clasificación para mil elementos,
esta también hace uso de la función de activación Softmax. Como las clases que necesitan
6
Para ver todos los modelos pre-entrenado de Keras consulte: https://keras.io/applications/
82 2 Aplicación

ser clasificadas en este proyecto son solo dos (VSS y LOTE), entonces reemplazamos ese mil,
por dos y esta serı́a la única modificación que se le harı́a al modelo.

Para crear la Red Neuronal comenzamos creando el modelo secuencial, al igual que el primer
modelo, con la diferencia que acá se le dice al modelo que decimos que por cada capa que
tenemos en VGG16, nos añada esa capa a nuestra Red Neuronal, esto se logra con la función
vgg.layers. Ahora como el modelo VGG16 hace predicción para mil objetos, necesitamos
modificar esa capa, por tanto se utilizó la función pop, que nos elimina esa última capa de
VGG16, que es la que hace la clasificación. Para posteriormente añadir una capa de clasi-
ficación pasándole dos neuronas que corresponden a nuestras dos clases y diciéndole que se
usará la función de clasificación Softmax.

Con la función layers se le dice al modelo que durante todo el entrenamiento qué tiene
que hacer para que aprenda a clasificar las viviendas, no queremos que las capas del mo-
delo VGG16 aprendan, ya que estas capas ya aprendieron en el pasado y tienen todos los
parámetros listos para ser utilizadas y no queremos que se modifiquen sus pesos.

Ya con esto tenemos la estructura para simplemente entrenar el modelo para estas dos
categorı́as, con toda la estructura pre-entrenada de VGG16. El resto de variables y atributos
del módulo son muy parecidos al modelos cnn, como el conjunto de datos de entrenamiento
y los hiperparámtros. Con la función fit generator ponemos a entrenar al modelo y al igual
que el primer modelo, este modelo y sus pesos fueron guardados en archivos de extensión
.h5 para ser usados posteriormente en la predicción.

Para compilar el modelo se utilizó el optimizador Adamax ya que en el primer modelo de-
mostró dar buenos resultados en el aprendizaje del entrenamiento. También se utilizó la
función de pérdida categorical crossentropy.

Para entrenar este modelo fue necesario experimentar modificando algunos hiperparáme-
tros como la cantidad de épocas, de pasos de entrenamiento y pasos de validación para llegar
al punto más óptimo del aprendizaje de entrenamiento. Sin embargo al ser un modelo tan
complejo, requiere mucha capacidad computacional, esto significa que se necesitan todos los
recursos del equipo y mucho tiempo para que complete su aprendizaje, por esta razón solo
fue posible entrenarlo por pocas épocas y pasos. Para poder comparar el aprendizaje de este
modelo con el primero se optó por entrenarlo durante cuatro épocas, cien pasos de entrena-
miento y cincuenta pasos de validación. Por la simplicidad de las imágenes en el conjunto
de entrenamiento, lo anterior no deberı́a ser un problema. Cuando se tienen imágenes de
gran resolución es necesario el entrenamiento con muchas épocas y pasos de entrenamiento
y validación para que logre reconocer todos los patrones de las imágenes y haga un correcto
aprendizaje.
2.4 Entrenamiento de los modelos CNN y VGG16 83

Las gráficas de las pérdidas y ganancias tanto de entrenamiento como de validación fue-
ron obtenidas gracias a Tensorboard, con estas será posible observar el comportamiento de
estas variables y ası́ poder realizar la comparación entre ambos modelos para ver cuál es el
mejor para realizar que haga la clasificación de Viviendas Sin Servicio y lotes en el mapa de
Media Luna.

A continuación se pueden observar las gráficas de las ganancias y pérdidas tanto del en-
trenamiento como de validación del modelo VGG16.

Figura 2-25: Ganancia de vgg16

La ganancia en el entrenamiento no es óptima, como puede evidenciarse en la figura 2-23,


podemos ver como generalmente decae el valor de esta variable, especialmente cuando el
modelo pasa a la tercer época, llegando a un valor de 0.5 lo que no es un buen indicador.

La pérdida de entrenamiento (figura 2-24) aunque decrece bastante en la segunda época


de entrenamiento, del tercer al cuarto paso tiene una subida llegando al valor de 0.7. Tam-
poco es un buen indicador de que la red esté aprendiendo de forma correcta.
84 2 Aplicación

Figura 2-26: Pérdida de vgg16

Figura 2-27: Ganancia validación de vgg16

La ganancia de validación (figura 2-26) es muy baja, con un valor de 0.45, se mantiene
contante durante todo el entrenamiento, en definitiva, el modelo VGG16 no ha tenido un
2.5 Predicción 85

buen entrenamiento con nuestro conjunto de datos.

Figura 2-28: Pérdida validación de vgg16

la perdida de validación aumenta durante todo el entrenamiento llegando a tiene un valor


de 0.71, bastante alta, llegando a la época cuatro.

2.5. Predicción

Una vez entrenados los modelos, se cargan junto con el mapa de Media Luna para que
comience el proceso de predicción. Para lograr hacer el conteo de VSS en el mapa,es necesario
dividirlo en pequeños parches que sean de tamaño similar al de los techos que sirvieron de
ejemplos en el aprendizaje de la CNN, esto es de 60x60px. El mapa de Media Luna tiene
una resolución de 4800x2783px, lo que significa que el mapa se dividió en 3.680 parches de
60x60px.(Figura 2-27). Cada uno de estos recuadros se pasaron al modelo de predicción, en
este el modelo clasificó uno a uno estos parches, dando como salida la etiqueta con mayor
probabilidad. Si el modelo clasifica la imagen como ”VSS”, entonces se suma una unidad al
contador y ası́ recorriendo los 3.680 parches que componen la totalidad del mapa, obteniendo
como resultado el total de Viviendas Sin Servicio que vio en ese barrido por el mapa.
86 2 Aplicación

Figura 2-29: Mapa de Media luna dividido en parches de 60x60 [2]

Aunque los modelos tengan porcentajes de ganancia y pérdida de entrenamiento y validación


óptimos, lo que se traduce en una predicción precisa, la precisión del conteo, comparando el
resultado con los datos reales, tiende a decaer un poco, esto se debe a que a la hora de hacer
la división del mapa en parches, muchas viviendas pueden quedar dividas, es decir, media
casa puede quedar en un parche y la otra mitad en otro, esto ocasiona que el modelo no re-
ciba las imágenes de los techos enteras como las que recibió en el conjunto de entrenamiento
y como resultado puede clasificar como un ”loteüna posible ”VSS”.

Para intentar dar solución al problema anterior lo que se experimentó fue hacer la pre-
dicción varias veces al mapa. Por cada vez que se hace una predicción sobre todo el mapa, se
inicia el recorrido en coordenadas diferentes. La primer predicción comienza en la coordena-
da (0,0) y da una salida y1 con el total de VSS que contó en el mapa. La segunda predicción
inicia en la coordenada (0,10) y da como resultado y2 . La cantidad de veces que se hace
clasificación sobre todo el mapa depende del tamaño de los parches. Como cada parche es
de 60x60px, lo que se quiso hacer fue iniciar el recorrido del mapa para un nuevo conteo
trasladando las coordenadas de inicio 10 pı́xeles hacia la derecha cinco veces y después hacia
abajo otras cinco veces, la razón de esto es porque después de recorrer 50 pı́xeles a la dere-
cha y hacia abajo, la rejilla queda en la posición inicial, recordando que cada parche es de
60x60px, dando un total de 25 salidas para cada predicción total del mapa. Como se tienen
2.5 Predicción 87

25 conteos de VSS como resultado de las clasificaciones, se seleccionó el menor y el mayor


de estos resultados, para ası́ dar como respuesta final no un número exacto, sino un rango
de VSS: Existen entre x e y VSS.
La encargada de hacer la predicción de cada uno de los parches del mapa de Media Luna es
la función predict de la API Models de Keras. Aquı́ es donde se cargan las imágenes que
necesitan la predicción. Esta función recibe cada parche y utiliza el modelo de entrenamiento
que se le pase, el primer modelo o el VGG16. La función predcit devuelve como resultado un
arreglo de dos dimensiones, que es el que devuelve la última capa de la red con la clasificación,
el cual va a tener valores como [1, 0] o [0, 1], donde 1 representa la etiqueta con más alto
porcentaje de probabilidad, es decir, va a traer un 1 en donde cree que es la predicción
correcta; entonces si como resultados nos arroja un arreglo [1, 0] significa que, según la
predicción del modelo, la imagen es una Vivienda sin Servicio, si por el contrario nos arroja
un arreglo [0, 1] significa que la predicción dio como resultado lote.
Cada vez que la predicción da VSS se suma una unidad al contador. ası́ cuando la función
termine de clasificar todos los 3.710 parches que componen al mapa dará el total de viviendas
que detectó en el con un número entero. Esta acción se repetirá 25 veces como se mencionó
anteriormente.
En esta función se inicializan las variables que representan las coordenadas y se le dan las
dimensiones del tamaño al recuadro, que serán de 60x60 px. Ası́ el recorrido inicia en las
coordenadas establecidas va recorriendo el mapa recuadro a recuadro hasta llegar a las coor-
denadas finales.

las imágenes clasificadas como VSS se guardan un arreglo nuevo que será verificado poste-
riormente con la función verificar. La salida de esta función es un número entero con el total
de viviendas que se contaron en todo el arreglo. Lo que hace la función verificar es pasar
estas imágenes nuevamente a la función predict para que vuelva a hacer una clasificación
sobre estas.
3 Comparación de los modelos

3.1. Discusión
En este capı́tulo se comparan los resultados obtenidos por los dos modelos de CNN vis-
tos durante el desarrollo de este proyecto. Para esto es necesario saber contra qué se van a
comparar los resultados obtenidos por los modelos. Recordando lo mencionado en el plantea-
miento del problema, se sabe que la unidad de Planeación Minero Energética de Colombia
(UPME) cuenta con una herramienta para la visualización de datos reportados por entida-
des territoriales y operadores de red, sin embargo, el inconveniente es que estas entidades no
cuentan con soportes para la validación de dicha información.

Figura 3-1: sitios UPME

Como se puede ver en la figura 3-1, en Sitios UPME, al ver las viviendas a energizar en Media
Luna nos muestra un total de 186 viviendas. Estos datos pueden ser solo una aproximación,
un método que tienen entidades como la UPME para corroborar esta información es mediante
el método manual, el cual consiste en hacer el conteo directamente sobre el mapa. Con este
método contamos un total de 42 viviendas en el caserı́o de Media Luna, un datos bastante
lejano a las 186 viviendas que nos permite visualizar sitios UPME.
3.1 Discusión 89

Figura 3-2: Mapa Media Luna

EL primer modelo tuvo un porcentaje de ganancia de validación de 0.979, esto es un buen


indicador de que la red aprendió de forma óptima. Para probar la efectividad del modelo,
se inició pasándole imágenes de techos y lotes al azar que no conocı́a, estás imágenes eran
de 60x60px, del mismo tamaño de las del conjunto de entrenamiento, en todas las imágenes
que le fueron suministradas, el modelo hizo una clasificación correcta. Lo siguiente es ver
el comportamiento con los parches de todo el mapa, al finalizar el proceso, el modelo contó
entre 37 y 41 Viviendas Sin Servicio en el mapa de Media Luna. Este es un rango bastante
aproximado a la hora de compara con los datos reales, que cuenta 42 VSS. La razón de
que el intervalo no sea más preciso, es que algunas viviendas pudieron ser clasificadas como
lotes al quedar divididas durante el recorte de parches del mapa, también pudo contar dos
casas como una, al quedar una mitad en un parche y la otra mitad en otro parche. Pero
a pesar de estos inconvenientes, el modelo dio un numero cercano a los datos reales. Estos
conteos se realizan en muchas ocasiones de forma manual , como el caso de la Unidad de
Planeación Minero Energética de Colombia, debido a faltas de recursos para realizar cen-
sos en esas zonas rurales apartadas del paı́s y que por tanto no disponen de algunos servicios.

Al modelo VGG16 después del entrenamiento, se le pasaron diferentes imágenes para


que hiciera predicción sobre ellas, al igual que el primer modelo. Como era de esperarse no
realizó una correcta clasificación y al terminar la predicción sobre todo el mapa, dio como
resultado un rango de entre 987 a 1107 Viviendas Sin Servicio, lo cual es un rango bastante
diferente a la cantidad real(42). En las siguientes gráfica comparamos los valores de estas
90 3 Comparación de los modelos

variables en ambos modelos:

Figura 3-3: acc modelos vgg16 y cnn

Figura 3-4: loss modelos vgg16 y cnn


3.1 Discusión 91

En la figura 3-5 se puede apreciar como la ganancia es mucho mayor con el modelo CNN
(azul) respecto al modelo pre-entrenado de kerar, VGG16 (naranja), esto quiere decir que
incluso en la ganancia de entrenamiento es mejor el modelo cnn.

Es evidente que el modelo cnn tiene un porcentaje de perdida mayor a la del modelo vgg16
como se pude evidenciar en la figura 3-6, esto sigue siento indicador de que este no es el
mejor modelo para realizar las predicciones en todo el mapa.

Figura 3-5: val acc modelos vgg16 y cnn

Esta es definitivamente la variable que nos indica cuál es el mejor modelo, por esta razón fue
vigilada durante el entrenamiento, cuando esta deja de incrementar, significa que el modelo
se sobrecargó, por tanto el entrenamiento debe parar ahı́. Para el modelo VGG16 se mantuvo
constante, lo que ya daba malas señales de su proceso de aprendizaje.
92 3 Comparación de los modelos

Figura 3-6: val loss modelos vgg16 y cnn

El porcentaje de pérdida de validación también es muy bajo en el primer modelo en com-


paración con el modelo VGG16, ahora tenemos la certeza de qué modelo es mejor para la
detección de techos de VSS en un mapa, el modelo cnn.

Estos resultados pueden deberse al tipo de imágenes que se le pasaron al modelo. recordemos
que este modelo fue entrenado para encontrar patrones en imágenes de gran resolución, con
lo que es necesario el uso de grandes cantidad de capas para reducir la imagen. Como se
mencionó en la sección 2.3.4 las convoluciones reducen las imágenes a la mitad si se usa un
max pooling de tamaño 2x2, esto significa que para una imagen de 60x60 se le podrán hacer
un máximo de cuatro convoluciones. Después de esa cantidad la imagen ya no puede ser
reducida. Por esta razón el primer modelo fue más efectivo que el segundo.

No es necesario el uso de tantas capas cuando se tiene una imagen de pequeña resolución,
esto afecta el aprendizaje del modelo de forma drástica afectando de manera negativa sus
porcentajes de aprendizaje y pérdida.

En la siguiente tabla encontramos los datos obtenidos por los modelos entrenados durante
cuatro épocas, de esta manera podemos verificar qué modelo está mejor entrenado,las ga-
nancias y pérdidas tanto de entrenamiento como de validación del modelo vgg16 no tienen
tan buenos resultados como el primer modelo.
3.2 Observaciones 93

Figura 3-7: Tabla comparativa

3.2. Observaciones
Es importante tener los datos de entrenamiento y validación, que son el conjunto de
entrenamiento del modelo de Deep Learning, Dividido en subgrupos de entrenamiento
y validación en las proporciones adecuadas para el correcto entrenamiento. Para este
trabajo se utilizaron 75 % de datos de entrenamiento y 25 % de datos de validación,
para un total de 1847 datos.

El pre-procesamiento de datos es una etapa esencial en el proceso de la limpieza de


datos, su integración, transformación y reducción para la siguiente fase. Debido a que
normalmente el uso de datos de baja calidad implica un proceso de aprendizaje y
predicción con pobres resultados.
94 3 Comparación de los modelos

La precisión obtenida con el primer modelo fue superior con una ganancia de validación
del 99.79 % frente al 60 % del modelo pre-entrenado de Keras: VGG16.

La capa de ajuste en el primer modelo que realiza corrección, mantiene época tras época
la precisión asemejada a la realidad algo que se iguala con el calculo de veracidad en
el modelo VGG16.

El uso de optimizadores y de la función de activación ReLu mejora de forma conside-


rable el aprendizaje de una red neuronal, para nuestro caso el que mejor resultado dio
fue Adamax, que hizo que el modelo llegara a una ganancia de validación del 99.79 %
en el modelo cnn, en tan solo 4 épocas de 100 pasos.

Aunque un modelo de entrenamiento secuencial esté construido con muchas capas,


como el caso del VGG16 que tiene 16 capas, no significa que se obtendrán mejores
resultados en las variables de salida, esto se debe que este es un modelo diseñado para
imágenes a gran escala.

La herramienta Tensorboard permite visualizar el proceso de aprendizaje de la red


neuronal convolucional mostrando los porcentajes de ganancia y perdida del entrena-
miento.

Acelerando las redes neuronales convolucionales usando GPUs los frameworks de Deep
Learning permiten a los investigadores crear y explorar redes neuronales convolucio-
nales y otras redes neuronales profundas fácilmente, al tiempo que ofrecen una alta
velocidad necesaria para los experimentos.

Las redes neuronales convolucionales han demostrado ser confiables a la hora de obtener
un modelo que detecte techos de Viviendas Sin Servicio, esto da una posible solución
al problema de tener un censo en regiones rurales del paı́s y ahorrando costos.
4 Aplicación Web

En este capitulo trataremos el tema de la aplicación web, que tiene como objetivo, dar una
herramienta a un usuario final que será el que necesita el total de Viviendas Sin Servicio
para diferentes proyectos.
Como se vio en la sección 2.4.3, flask es una herramienta escrita en python que permite
la creación de aplicaciones web básicas y minimalistas, pero funcionales. Para intentar dar
solución a la problemática que tienen algunas organizaciones como la Unidad de Planeación
Minero Energética de Colombia (UPME), se hizo una aplicación web en la que el usuario
puede subir el mapa a través de la plataforma y ver la cantidad de viviendas detectas que
detecta en él. Esto aplica para el mapa de Media Luna o mapas con caracterı́sticas similares,
teniendo en cuenta el conjunto de entrenamiento utilizado para la creación de los modelos
de clasificación. Esta herramienta proporciona una interfaz gráfica con un entorno visual
sencillo.

4.0.1. Manual de usuario

1. Al ingresar a la ruta, se le mostrará una vista como la de la figura 4-1. Allı́ podrá
encontrar el texto descriptivo de la aplicación y la sugerencia de que el mapa debe ser
tomado a una altura de 728 metros para que el modelo haga una predicción óptima.
En caso contrario habrán fallas al no hacer una coincidencia entre los tamaños de las
imágenes y el resultado estará alejado de la realidad.

A continuación se verá un botón llamado seleccionar archivo haga clic ahı́.


96 4 Aplicación Web

Figura 4-1: Página de inicio

2. Al dar clic en el botón seleccionar archivo se desplegará una ventana donde usted
deberá buscar la ruta de su mapa. Seleccione y dele clic al botón abrir como se indica
en la figura 4-2.

Figura 4-2: Página de inicio


97

3. Una vez se haya cargado el mapa en la aplicación, esta lo mostrará en la vista como se
muestra en la figura 4-3. Ahora solo debe dar clic en el botón Detectar y contar y
la aplicación comenzará a recorrer el mapa parche a parche (parches de 60x60px), este
proceso tardará un tiempo.

Figura 4-3: Página de conteo

4. Al finalizar el proceso de detección, clasificación y conteo de Viviendas Sin Servicio, esta


arrojará un rango de valores de las posibles VSS encontradas en todo el mapa. Estos
valores quedarán indicados debajo del botón Detectar y contar, con las etiquetas
mı́nimo y máximo como se ve en la figura 4-4
98 4 Aplicación Web

Figura 4-4: Página de la app

Como se puede ver, esta es una aplicación bastante minimalista, pero intuitiva y funcional.
Ası́ que el usuario no va a tener mayor inconveniente al usarla correctamente mientras siga
las indicaciones.
5 Conclusiones
La comparación de diferentes modelos de predicción es una parte fundamental a la
hora de analizar su eficacia y ver cual se adapta mejor a los resultados esperados.

El primer modelo demostró que con pocas convoluciones se puede lograr una buena
extracción de atributos de una imagen simple y de pequeña escala, como el caso de
las imágenes de techos de Viviendas Sin Servicio que formaron parte del conjunto de
entrenamiento, dando como resultado una precisión en el porcentaje de validación del
entrenamiento de 99.79 %.

El modelo pre-entrenado VGG16 demostró que el uso de muchas convoluciones no es lo


más eficiente a la hora de entrenar una imagen de pequeña escala. Esto es debido a que
el Pooling reduce la imagen a la mitad en cada convolución y al contar con una imagen
pequeña como la de una Vivienda Sin Servicio (60x60px), solo se puede reducir hasta
un tamaño igual o mayor a 3x3px que es el tamaño del filtro que se le está aplicando.
Este modelo dio como resultado una precisión en la validación de entrenamiento de
60 %. Lo que es bastante inferior al primer modelo.

El primer modelo tiene un alto porcentaje de precisión en sus predicciones, sin embargo,
la forma en que es recorrido el mapa puede llegar a generar impresión en la cantidad
de viviendas detectadas por la aplicación.

La mejora de la aplicación desarrollada en este proyecto podrı́a dar solución al problema


en el desconocimiento del número de viviendas en zonas rurales de difı́cil acceso con
caracterı́sticas geográficas similares a las del caserı́o de Media Luna por parte de las
entidades interesadas.

El desempeño del aprendizaje de un modelo de detección de objetos está fuertemente


relacionado con la calidad de las imágenes en el conjunto de entrenamiento. Esto quiere
decir, que el modelo realizado en esta investigación podrı́a generar resultados más
precisos si se entrenara con imágenes de mejor calidad que las de Google Earth.

La aplicación demostró ser una herramienta eficaz al momento de detectar y contar el


número de viviendas comparado con información levantada de manera primaria.

Contar con una herramienta de Deep Learning que sea capaz de mostrar la cantidad
de viviendas que detectó en un mapa de una zona rural podrı́a ahorrar altos costos y
100 5 Conclusiones

agilizar los procesos de estudios y proyectos realizados por diferentes entidades con el
objetivo de ayudar a la población.
6 Anexos

6.1. Inteligencia Artificial


EL inicio de la inteligencia artificial puede situarse en el año 1943 con la definición de la
neurona formal dada por McCulloch y Pitts, como un dispositivo binario con varias entradas
y salidas. Para 1950, Alan M. Turing habı́a publicado un artı́culo en la revista Mind, titulado
“Computing Machinery and Intelligence” (“Ordenador e inteligencia”), en el que reflexionaba
sobre el concepto de inteligencia artificial y establecı́a lo que luego se conocerı́a como el Test
de Turing, una prueba para reconocer comportamientos inteligentes: “Si la ejecución de un
sistema de IA puede convencernos de que su comportamiento es el que tendrı́a un humano,
entonces el sistema es verdaderamente inteligente” Alan Turing (1912-1954).
En 1956 en el instituto de tecnologı́a de Massachussets se celebró la conferencia de Dartmouth
en Hanover (Estados Unidos). En este certamen Jhon McCarthy, Marvin Minsky, Nathaniel
Rochester y Claude E. Shannon establecieron las bases de la inteligencia artificial como un
campo independiente dentro de la informática.
Autores como Rich y Knight (1994) y Stuart (1996), definen en forma general la inteligencia
artificial como la capacidad que tienen las máquinas para realizar tareas que en el momento
son realizadas por seres humanos; Nebendah (1988) y Delgado (1998), la definen cómo el
campo de estudio que se enfoca en la explicación y emulación de la conducta inteligente en
función de procesos computacionales basadas en la experiencia y el conocimiento continuo
del ambiente. Con estas definiciones presentes, se puede observar la inteligencia artificial
desde dos enfoques diferentes:

La inteligencia artificial convencional, basada en análisis formal y estadı́stico del com-


portamiento humano. Se divide a su vez en:
• Razonamiento basado en casos: implementada en toma de decisiones para proble-
mas especı́ficos.
• Sistemas Expertos: Infieren soluciones a través del conocimiento previo bajo cier-
tas reglas o relaciones.
• Redes Bayesianas: Soluciones mediante inferencia estadı́stica.
• Basada en Comportamientos: Sistemas Complejos que tienen autonomı́a y pueden
auto-regularse y controlarse para mejorar.
102 6 Anexos

La inteligencia computacional, donde el aprendizaje se realiza basándose en datos


empı́ricos. Algunas de sus ramas son:
• Redes Neuronales: Sistemas con grandes capacidades de reconocimiento de patro-
nes.
• Máquina de Vectores Soporte: Sistemas que permiten reconocimiento de patrones
genéricos de gran potencia.
• Sistemas Difusos: Técnicas para lograr el razonamiento bajo incertidumbre.
• Modelos ocultos de Markov: Aprendizaje basado en dependencia temporal de
eventos probabilı́sticos.
• Computación Evolutiva: Aplica conceptos inspirados en la biologı́a, tales como
población, mutación y supervivencia del más apto para generar soluciones suce-
sivamente mejores para un problema. Estos métodos a su vez se dividen en algo-
ritmos evolutivos (ej. algoritmos genéticos) e inteligencia colectiva (ej. algoritmos
hormiga)

Stuart Russell y Peter Norvig diferencian estos tipos de la inteligencia artificial, los cua-
les están contenidos dentro de las enfoques anteriormente mencionados. Los sistemas que
piensan como humanos, tratan de emular el pensamiento humano; por ejemplo las redes
neuronales artificiales, resolución de problemas y aprendizaje, etc. Para los sistemas que
actúan como humanos buscan simular esto mismo; es decir, imitan el comportamiento hu-
mano; por ejemplo la robótica, que busca lograr que los computadores realicen tareas que,
por el momento, los humanos hacen mejor.
Por otra parte están los sistemas que piensan racionalmente, mediante lógica (idealmente),
tratan de imitar o emular el pensamiento lógico racional del ser humano; por ejemplo los
sistemas expertos. El estudio de los cálculos que hacen posible percibir, razonar y actuar.
Finalmente los sistemas que actúan racionalmente que intentan emular de forma racional el
comportamiento humano; por ejemplo los agentes inteligentes.

La IA se ha desarrollado como disciplina a partir de la concepción de la inteligencia que


se realizó al interior de la psicologı́a y a partir de la cual se elaboraron diferentes categorı́as.
Esta a su vez posee técnicas (Búsqueda heurı́stica, redes neuronales, etc) que son usadas
como herramientas para solucionar problemas que pueden encontrarse en la base de diversas
aplicaciones de IA como la deducción automática o con mayor nivel de profundización como
la robótica.
Finalmente los pasos para la construcción de un sistema de inteligencia artificial son:

Definir el problema

Analizar el problema
6.1 Inteligencia Artificial 103

Identificar y representar el conocimiento

Seleccionar la herramienta que mejor funciona para el problema

La inteligencia artificial puede distribuirse en cuatro grandes temas:

Figura 6-1: Inteligencia artificial

6.1.1. Imágenes satelitales


Una imagen satelital es una representación visual de los datos reflejados por la superficie
de la tierra que captura un sensor montado en un satélite artificial, como el GeoEye-1 de
Google, es decir, una imagen satelital es una matriz digital de puntos capturada por un
sensor montado abordo de un satélite que orbita alrededor del planeta. Mientras el satélite
avanza en su órbita, recorre la superficie con detectores que registran la energı́a reflejada.
Los datos obtenidos son enviados a una estación en donde se procesan y se convierten en
imágenes, enriqueciendo nuestro conocimiento de las caracterı́sticas de la Tierra en diferentes
escalas espaciales.
La percepción remota espacial hace uso de las imágenes satelitales como materia prima de
datos para extraer información del medio geofı́sico y geográfico.
Las imágenes satelitales se encuentran en formato raster, el cual consiste en una matriz de
miles de pı́xeles, en donde cada pı́xel tiene un valor digital o de reflectancia; es decir, si la
resolución de la imagen es de 50 metros, cada pı́xel muestra un área en la superficie terrestre
de 50x50 metros (2500 m2 ), con esto, la firma espectral de todos los objetos existentes en una
superficie de 2500 m2 será promediada para darle su valor digital al pı́xel. La información
que contiene cada pı́xel está en formato digital, por lo general de 8 bit, por lo que cada pı́xel
104 6 Anexos

de la imagen puede tener 28 = 256 posibles colores distintos, en donde 0 corresponde al color
negro, 255 al color blanco y se encuentran 254 diferentes tonos de gris intermedios [36].

Las caracterı́sticas de una imagen satelital son: Estructura, resolución, precisión, escala y las
combinaciones de color

6.1.2. Red Neuronal Artificial o RNA


Existen varias maneras de definir lo que son las redes neuronales, desde las definiciones
cortas y genéricas hasta las que intentan explicar más detalladamente lo que significa “red
neuronal.o “computación neuronal”. Veamos algunos ejemplos de ambos casos:
Una nueva forma de computación, inspirada en modelos biológicos.

Un modelo matemático compuesto por un gran número de elementos procesales orga-


nizados en niveles.

“... un sistema de computación hecho por un gran número de elementos simples, ele-
mentos de proceso altamente interconectados, los cuales procesan información por me-
dio de su estado dinámico como respuesta a entradas externas.” Robert Hecht-Niesen,
1988.

“Redes neuronales artificiales son redes interconectadas masivamente en paralelo de


elementos simples (usualmente adaptativos) y con organización jerárquica, las cuales
intentan interactuar con los objetos del mundo real del mismo modo que lo hace el
sistema nervioso biológico”. Teuvo Kohonen, 1982.
Es verdad que ciertos caracteres textuales de la red son inherentes y durante la ontogéne-
sis las proyecciones neuronales crecen aproximadamente hacia aquellos lugares en los cuales
serán necesitados más tarde. En otras palabras, la distribución de los recursos y los caminos
de comunicación más importantes, están formados de acuerdo con un plan genético, mientras
que el resto del ”programming.en especial la memoria, debe ser adquirida después de nacer.

Programar tal red puede significar sólo dos cosas: a) Las estructuras de interconexión entre
las células son alteradas, y b) Las “fuerzas”de estas interconexiones son cambiadas [20].

Debido a su constitución y a sus fundamentos, las redes neuronales artificiales presentan un


gran número de caracterı́sticas semejantes a las del cerebro. Por ejemplo, son capaces de
aprender de la experiencia, de generalizar de casos anteriores a nuevos casos, de abstraer ca-
racterı́sticas esenciales a partir de entradas que representan información irrelevante, etc [20].
Esto hace que ofrezcan numerosas ventajas y que este tipo de tecnologı́a se esté aplicando
en múltiples áreas. Estas ventajas incluyen[3]:
6.1 Inteligencia Artificial 105

Aprendizaje adaptativo: Capacidad de aprender a realizar tareas basada en un entre-


namiento o una experiencia inicial.

Auto-organización: Una red neuronal puede crear su propia organización o representa-


ción de la información que recibe mediante una etapa de aprendizaje.

Tolerancia a fallos: La destrucción parcial de una red conduce una degradación de


su estructura, sin embargo, algunas capacidades de la red se pueden retener incluso
sufriendo un gran daño.

Operación en tiempo real: Los computadores neuronales pueden ser realizados en pa-
ralelo y se diseñan y fabrican máquinas con hardware especial para obtener esta capa-
cidad.

Fácil inserción dentro de la tecnologı́a existente: Se pueden obtener chips especializados


para redes neuronales que mejoran su capacidad en ciertas tareas. Ello facilitará la
integración modular en los sistemas existentes.

Dentro de lo que se entiende por inteligencia artificial, una de las ramas más prometedoras
es la que corresponde a las denominadas redes de auto-proceso, entendiendo como tales
aquellas formadas por nodos en los que hay elementos procesadores de información de cuyas
interacciones locales depende el comportamiento del conjunto del sistema.

Como indica la figura 6-2 , dentro del campo de la inteligencia artificial, existen dos grandes
ramas de las redes de auto-proceso: Procesamiento numérico y procesamiento simbólico:

Procesamiento numérico: Reciben directamente la señal de entrada desde el exterior


y operan sobre ella. Esta rama se dedica a los sistemas constituidos por nodos hard-
ware interconectados entre sı́ formando una red. También se les suele llamar sistemas
conectivistas o conexionistas.

Procesamiento simbólico: estas redes están constituidas por “conceptos”(NODOS de


la red) y por reglas sintácticas”(lazos de INTERCONEXIÓN); ambas forman las de-
nominadas bases de conocimiento. La simulación de estas redes es casi exclusivamente
software [3].
106 6 Anexos

Figura 6-2: Situación de las redes neuronales en el campo de la Inteligencia Artificial[3]

Para terminar de situar la teorı́a de redes neuronales dentro del mundo de la “computación.en
general, y frente a la IA en particular, en la siguiente tabla se resume y sintetiza parte de las
ideas vistas hasta ahora acerca de las redes neuronales y las diferencias existentes respecto
a la computación convencional y a la computación simbólica. Se muestran las diferencias en
función de la teorı́as en las que se basan, en los campos para las que son y no son apropiadas,
el tipo de memoria que utilizan, cómo se construyen y qué tipo de soporte utilizan.

Figura 6-3: Tabla de resumen RNA [47]


6.1 Inteligencia Artificial 107

El estudio de redes neuronales sirve para comprender cómo funciona realmente el cerebro
humano, esto es necesario a la hora de diseñar un modelo de cómputo paralelo inspirado en
las neuronas y sus sinapsis (conexiones) adaptativas.1 . El cerebro humano es la inspiración de
las redes neuronales artificiales, las RNA pretenden modelar la estructura y funcionamiento
de algunas partes del sistema nervioso animal.

6.1.3. Anatomı́a del cerebro


En la figura 6-4 se representa la anatomı́a del cerebro, esto con el fin de dar una idea más
clara de cómo las redes neuronales artificiales pretenden simular su comportamiento.

Figura 6-4: Anatomı́a del cerebro [10]

La anatomı́a y funcionamiento del cerebro puede ser categorizado de muchas formas. La


división anatómica común se basa en la médula espinal, el sistema nervioso periférico, el
cerebelo y luego el cerebro, con los lóbulos del cerebro. Las funciones asignadas a cada área
utilizando la división anatómica serı́an las siguientes[45]:

Tronco encefálico, médula espinal y sistema nervioso periférico: Entrada/salida


para el cerebro que coordina el envı́o de señales motoras y la recepción de información
sensorial de órganos, piel y músculos.

Cerebelo: Movimiento complejo, postura y equilibrio.

Lóbulo occipital: Visión, desde la percepción básica hasta el reconocimiento comple-


jo.

Lóbulo temporal: Procesamiento auditivo y lenguaje.


1
Incluso aunque no sepamos realmente cómo funciona el cerebro, los algoritmos de aprendizaje nos serán
muy útiles.
108 6 Anexos

Lóbulo parietal: Movimiento, orientación, reconocimiento e integración de la percep-


ción.

Lóbulo frontal: Razonamiento, planificación, función ejecutiva, partes del habla, emo-
ciones y resolución de problemas. Además, la corteza motora primaria que dispara el
movimiento junto con el lóbulo parietal y el cerebelo. La memoria se distribuye apa-
rentemente por todo el cerebro y el cerebelo, y potencialmente incluso en partes del
tronco cerebral y más allá.

La figura 6-5 muestra una analogı́a entre en cerebro y el ordenador:

Figura 6-5: Analogı́a entre cerebro humano y ordenador [6]

En la figura 6-6 se resumen las diferencias entre un ordenador y el cerebro humano:

Figura 6-6: Comparación entre un ordenador y el cerebro [50]


6.1 Inteligencia Artificial 109

6.1.4. Neurona

Neurona biológica
Las neuronas, junto con las células gliales, hacen parte de los sistemas nerviosos central y
periférico. Mediante estos sistemas los animales se comunican con el medio que les rodea,
tanto captando estı́mulos como emitiendo señales a los músculos para mover partes de su
organismo o desplazarse. Las neuronas son las principales encargadas de realizar estas fun-
ciones puesto que están especializadas en la recepción, procesamiento y emisión de
información mediante mecanismos quı́micos y eléctricos que están asociados a su membra-
na plasmática.

Estas funciones no las puede realizar una célula individualmente sino que lo hacen grupos
más o menos numerosos de neuronas conectadas entre sı́ formando circuitos. Dentro de
cada circuito, las neuronas se comunican entre ellas principalmente mediante unas especiali-
zaciones en sus membranas celulares denominadas, gracias a las cuales se establecen dichos
circuitos neuronales (sinapsis)[13].

Figura 6-7: Imagen de una neurona de la corteza cerebral de una rata impregnada con la
técnica de Golgi [8].

Las neuronas poseen la morfologı́a más diversa y compleja en comparación con las demás
células del cuerpo. Las neuronas están dividas en tres partes: soma, dendritas y axón como se
puede apreciar en la imagen anterior. El tamaño y forma del soma, la densidad y organización
de las dendritas, ası́ como la disposición, longitud y patrón de ramificación de los axones son
diferentes para cada tipo de neurona[13].
Neurona Artificial La neurona artificial, célula o autómata, es un elemento que posee un
estado interno, llamado nivel de activación, y recibe sefiales que le permiten, en su caso,
cambiar de estado [39].
110 6 Anexos

Figura 6-8: Neurona artificial [48].

Las neuronas artificiales se modelan mediante unidades de proceso, caracterizadas por una
función de activación que convierte la entrada total recibida de otras unidades en un valor
de salida, el cual hace la función de la tasa de disparo de la neurona. Cada unidad de proceso
se compone de una red de conexiones de entrada, una función de red (de propagación),
encargada de computar la entrada total combinada de todas las conexiones, un núcleo central
de proceso, encargado de aplicar la función de activación, y la salida, por dónde se transmite
el valor de activación a otras unidades[21].

Figura 6-9: Neurona artificial [21]


6.1 Inteligencia Artificial 111

Las conexiones sinápticas se simulan mediante conexiones ponderadas; la fuerza o peso de


la conexión cumple el papel de la efectividad de la sinapsis. Las conexiones determinan si es
posible que una unidad influya sobre otra, los pesos definen la intensidad de la influencia.
Una unidad de proceso recibe varias entradas procedentes de las salidas de otras unidades de
proceso. La entrada total de una unidad de proceso se suele calcular como la suma de todas las
entradas ponderadas, es decir, multiplicadas por el peso de la conexión. El efecto inhibitorio
o excitatorio de las sinapsis se logra usando pesos negativos o positivos respectivamente[21].
La siguiente ecuación muestra el comportamiento, tiene un grupo de entradas x1, x2,..., xn
son introducidas en el perceptrón. Éstas entradas corresponden a las señales de la sinapsis de
una neurona biológica. Cada señal se multiplica por un peso asociado w1, w2, ..., wn antes
P
de ser aplicado el sumatorio etiquetado por . Cada peso corresponde a la fuerza de una
conexión sináptica, es decir, el nivel de concentración iónica de la sinapsis. El sumatorio, que
corresponde al cuerpo de la neurona, suma todas las entradas ponderadas produciendo una
salida:

y = x1 w1 + x2 w2 + ... + xn wn
P
y= (pesos ∗ entradas) + bias

Las señales E son procesadas además por una función llamada función de activación, esta
produce la señal de salida de la neurona.
Las neuronas artificiales y las biológicas tienen en común el hecho de que establecen conexión
con otras neuronas vecinas para el envió y la obtención de información, ambas reciben
información de varias entradas para generar una sola salida. La neurona artificial captura
señales mediante sensores simulando al axón en la neurona biológica.
A continuación tenemos una tabla comparativa entre neuronas artificiales y biológicas:

Figura 6-10: Comparación Neurona Biológica y Neurona Artificial[21]

La función de red es tı́picamente el sumatorio ponderado, mientras que la función de activa-


ción suele ser alguna función de umbral o una función sigmoidal. A continuación podemos
ver una tabla comparativa entre una red neuronal artificial y una red neuronal biológica:
112 6 Anexos

Figura 6-11: Comparación Redes Neuronales Biológicas y RNA [21]

Tanto las redes neuronales biológicas como las redes neuronales artificiales tienen el mismo
funcionamiento de comunicación, con una estructura muy similar solo que cada una con sus
respectivos nombres. Ambas utilizan una potencia máxima y mı́nima para lograr la comu-
nicación.

Estructura básica de la red

En la siguiente figura se muestra un ejemplo de una unidad tı́pica de proceso de una Red
Neuronal Artificial. Al lado izquierdo de la red está una serie de entradas al perceptrón,
cada una llega de la salida de otro perceptrón de la red. una vez calculada la salida de un
perceptrón, ésta se propaga por medio de conexiones de salida a los perceptrones destino.
Todas las conexiones de salida reciben el mismo valor de salida[33].

Figura 6-12: Esquema de una red de tres capas totalmente interconectadas[33]


6.2 Librerı́as Keras 113

A la forma en que los perceptrones se conectan entre sı́ se le llama patrón de conectividad
o arquitectura de la red. La estructura básica de interconexión entre neuronas artificiales
es la de multicapa. Esta es una estructura de implementación del paradigma conocido como
Retro-Propagación [33].
El esquema de funcionamiento de una red neuronal por capas puede describirse mediante la
ecuación:

e · W1 ) · w2 )
Se = F (F (X

Donde w1 y w2 son los pesos de la primera y segunda capa, F es la función de activación ,


X
e es el vector de entrada a la red y Se es el vector de salida que la red produce[33].

6.2. Librerı́as Keras


6.2.1. Models
Sequential
Se considera como una de las estructuras más importantes en Keras. Es un modelo
vacı́o el cual permite establecer e indicar la creación de una serie de capas sucesivas,
cada una de ellas hace un filtro para que la salida de datos sea o se aproxime a la
esperada,mediante al método add() se pueden adicionar más capas al modelo. En
Keras se declara de la siguiente forma:

from keras.models import Sequential

El modelo necesita saber qué forma de entrada debe esperar. Por esta razón, la pri-
mera capa en un Sequential (y solo la primera, porque las siguientes capas pueden
hacer inferencia automática de formas) necesita recibir información sobre su forma de
entrada. Esto se puede hacer con los parámetros input shape que indica la entrada
es una tupla de enteros o none indica que se puede esperar cualquier entero positi-
vo, la dimensión no esta incluida. ALgunas capas 2D y 3D como Dense, admiten la
especificación de su forma de entrada a través del argumento input dim, se declaran ası́:

model = Sequential ()
model.add(Dense(32, input shape = (784,)))

Compile
Antes de entrenar un modelo, debe configurar el proceso de aprendizaje, que se realiza
a través del método compilación. Recibe tres argumentos:
114 6 Anexos

• Un optimizador: Este podrı́a ser el identificador de cadena de un optimizador


existente (como Adam, Adamax, Nadam, etc), o una instancia de la clase Optimi-
zer.
• Una función de pérdida: Este es el objetivo que el modelo intentará minimizar.
Puede ser el identificador de cadena de una función de pérdida existente (como
categorical crossentropy, hinge, etc), o puede ser una función objetivo.
• Una lista de métricas: Para cualquier problema de clasificación se debe esta-
blecer metrics = [‘accuracy 0 ]. Una métrica podrı́a ser el identificador de cadena
de una métrica existente o una función de métrica personalizada.

Un ejemplo de la declaración del modelo es:

Figura 6-13: Método compile Sequencial [25]

Predict
Genera predicciones de salida para las muestras de entrada. Predice la clasificación de
nuevas imágenes. Para ello, se utiliza algunas imágenes del conjunto de prueba, que
son cargadas como matrices en numpy para ser utilizadas. El cálculo se realiza en lotes.
Estas predicciones se realizan luego de entrenar un modelo final, y se declaración se
hace ası́:

predict(x, batchs ize = N one, verbose = 0, steps = N one, callbacks = N one)

Donde x es un vector o matriz de entrada, seguido por el tamaño del lote, modo de
verbosidad, (0 o 1), el número total de pasos (lotes de muestras) y finalmente si adiciona
o no una lista instancias keras.Callback.

Fit generator
Entrena el modelo en los datos generados lote por lote por un generador de Python (o
una instancia de Sequence). A diferencia de la función fit, fit generator esta diseñado
para grandes cantidades de datos y funciona multiproceso. El generador se ejecuta en
paralelo al modelo, por eficiencia. Por ejemplo, esto le permite hacer un aumento de
6.2 Librerı́as Keras 115

datos en tiempo real en imágenes en la CPU en paralelo para entrenar a su modelo en


GPU.
Para su implementación se recibe el arreglo a compilar con los pasos por época y las
épocas para entrenar. Se declara ası́:

model.f it generator(generate arrays f rom f ile(0 /my f ile.txt0 ), steps per epoch =
10000, epochs = 10)

6.2.2. Layers
Convolution 2D
Crea un núcleo de convolución para producir un tensor de salida, la convolución 2D
es solo una extensión de la convolución 1D mediante la convolución de las direcciones
horizontal y vertical en el dominio espacial bidimensional. La convolución se utiliza
con frecuencia para el procesamiento de imágenes, como el suavizado, el enfoque y la
detección de bordes de las imágenes.
Esto se realiza multiplicando y acumulando los valores instantáneos de las muestras
superpuestas correspondientes a dos señales de entrada, una de las cuales se invierte dos
veces. Esta definición es aplicable para convolución 1D, excepto una de las entradas
se invierte solo una vez. La convolución puede entenderse como una señal se puede
descomponer en una suma de funciones de impulso (delta) escaladas y desplazadas.

Figura 6-14: Función de impulso 2D [52]

La formulación matemática de estas funciones de impulso escaladas y desplazadas o


convolución 2-D está dada por:
116 6 Anexos

Donde x representa la matriz de la imagen de entrada que se convuelve con la matriz


del kernel h para generar una nueva matriz y, que representa la imagen de salida.
Mientras, los ı́ndices i, j están relacionados con las matrices de imagen, los ı́ndices m,
n tratan con la matriz del kernel.

Max pooling 2D
Max pooling es un proceso de discretización basado en muestras que tiene como objeti-
vo muestrear una representación de entrada (imagen, matriz de salida de capa oculta,
etc.), reduciendo su dimensionalidad y permitiendo hacer suposiciones sobre las ca-
racterı́sticas contenidas en las sub-regiones agrupadas. Esto se hace, en parte, para
ayudar al ajuste excesivo al proporcionar una forma abstracta de la representación.
Además, reduce el costo computacional al reducir el número de parámetros a aprender
y proporciona una invarianza de traducción básica a la representación interna.
La agrupación máxima se realiza aplicando un filtro máximo, ventana móvil o recuadro
mudable a (generalmente) sub-regiones no superpuestas de la representación inicial.
Este hace dos cosas principales:
• Reduce la cantidad de parámetros dentro del modelo y cuando la salida es más
pequeña que la entrada se denomina muestreo descendente o sub-muestreo.
• Generaliza los resultados de un filtro convolucional, lo que hace que la detección
de caracterı́sticas sea invariante a los cambios de escala u orientación.
Es decir que en una matriz 4x4 que representa la entrada inicial, y al ejecutar un filtro
2x2 sobre la entrada se obtiene un paso en 2D dx, dy y no se superpondrán las regiones.
Para cada una de las regiones representadas por el filtro, se toma el el máximo de esa
región y es generada una nueva matriz de salida donde cada elemento es el máximo de
una región en la entrada original.

Figura 6-15: Maxpooling 2D [41]


6.2 Librerı́as Keras 117

Flatten
Esta capa convierte la imagen de tres dimensiones a una sola, convierte los elementos
de la matriz de imágenes de entrada en un array plano sin afectar el lote, hereda de
la clase layer. El propósito de este argumento es preservar el orden de peso al cambiar
un modelo de un formato de datos a otro.
Esta propiedad se invoca luego de que los datos fueron procesados por una capa de
superior de convolución. Se invoca con la función add, ası́:

model.add(F latten())

Dropout
Es un método de regularización que minimiza el riesgo del sobre-entrenamiento de
una red neuronal mediante la eliminación de unidades de cada una de las capas que
componen la red. Para esto utiliza una perturbación a cada minibatch (pequeños lotes
equivalentes, que dividen la información ingresada). Se declara ası́:

keras.layers.Dropout(rate, noise shape = N one, seed = N one)

Donde
• rate: Dı́gito flotante entre 0 y 1. Fracción de las unidades de entrada.
• noise shape: Tensor entero 1D que representa la forma de la máscara de omisión
binaria que se multiplicará con la entrada. Por ejemplo, si sus entradas tienen
forma (batch size, timesteps, features) y desea que la máscara de desactivación sea
la misma para todos los pasos de tiempo, puede usar la (noise shape=(batch size,
1, features).
• seed: Un entero de Python para usar como semilla aleatoria.
Este método se puede utilizar en cualquier tipo de capa, sin embargo se puede utilizar
únicamente sobre capa de entrada o capa visible, no sobre la de salida.
El proceso consiste en que en cada etapa de entrenamiento, los nodos individuales
se eliminan de la red dependiendo su probabilidad, quedando una red reducida.Al
eliminarse al azar la mayor cantidad de unidades, mejora la generalización de la red y
facilita que la información sea clasificada de forma más inmediata y este más cerca al
resultado esperado.

Dense
Esta función añade una capa oculta (hidden layer) de la red neuronal, una capa total-
mente conectada. Implementa la operación:
118 6 Anexos

output = activation(dot(input, kernel) + bias)

Donde activation es la función de activación de elementos que se pasa como el argu-


mento activation, kernel es una matriz de ponderaciones creada por la capa, y bias es
un vector de polarización creado por la capa (solo aplicable si use biases es verdadero).
Si la entrada a la capa tiene un rango mayor que 2, entonces se aplana antes del punto
inicial del producto con kernel. Para evidenciar el funcionamiento veamos un ejemplo
de la configuración de la capa Dense.
Iniciamos declarando el modelo secuencial,

model = Sequential()

Configuramos el modelo para que tome matrices de entrada de forma (*, 16) y matrices
de salida de forma (*, 32), ası́:

model.add(Dense(32, inputs hape = (16, )))

Esta configuración queda activa en el modelo y después de la primera capa no es


necesario especificar el tamaño de la entrada.

model.add(Dense(32))

6.2.3. Preprocessing.image
ImageDataGenerator
Es un API que define la configuración para la preparación y el aumento de datos de
imágenes. En lugar de realizar las operaciones en su conjunto de datos de imagen
en la memoria, la API está diseñada para ser iterada por el proceso de ajuste del
modelo de aprendizaje profundo, creando datos de imagen aumentados para usted
justo a tiempo. Esto reduce la sobrecarga de memoria, pero agrega un costo de tiempo
adicional durante el entrenamiento del modelo.
Keras proporciona esta clase que define la configuración para la preparación y el au-
mento de datos de imágenes e incluye capacidades como:
• Estandarización de caracterı́sticas, estandarizar los valores de pı́xeles en todo el
conjunto de datos. Se puede realizar utilizando los argumentos featurewise center
y featurewise std normalization.
• Blanqueamiento ZCA, una transformación de blanqueamiento de una imagen es
una operación de álgebra lineal que reduce la redundancia en la matriz de imágenes
de pı́xeles. Es utilizada mediante el argumento zca whitening.
6.2 Librerı́as Keras 119

• Rotaciones aleatorias, permite pueden tener diferentes rotaciones artificiales y


aleatorias de las imágenes en el conjunto de datos de la imagen. Se establece con
el argumento rotation range.
• Turnos aleatorios, permite el desplazamiento de los objetos creando versiones
modificadas de sus datos.Se establece con los argumentos width shift range y
height shift range.
• Flips aleatorios, permite crear giros aleatorios de imágenes en los datos de entre-
namiento. Se establece con los argumentos vertical flip y height flip.

Inicialmente es construido la clase ImageDataGenerator, se debe hacer un ajuste en


los datos. Esto calculará las estadı́sticas necesarias para realizar las transformaciones
a los datos de la imagen. Se realiza llamando funciones fit() en el generador de datos
y pasándole su conjunto de datos de entrenamiento. Este es un iterador en si mismo,
que devuelve lotes de muestras de imágenes cuando se solicitan. Podemos configurar
el tamaño del lote y preparar el generador de datos para obtener lotes de imágenes lla-
mando a la función flow(), con estos pasos se puede hacer uso de esta función. En lugar
de llamar a la función fit() en el modelo, se debe llamar la función fit generator()
entregando el generador de datos y la longitud deseada de una época (número de repe-
ticiones de los pasos fijados), ası́ como el número total de épocas en las que entrenar.

6.2.4. Aplications
Aplication de Keras son modelos de Deep Learning que están disponibles junto con sus pesos
pre-entrenadas. Estos modelos se pueden usar para predicción, extracción de caracterı́sticas
y ajuste fino. Los pesos se descargan automáticamente al crear una instancia de un modelo.
Se almacenan en /.keras/models/.
Modelos disponibles

Xception

VGG16

VGG19

ResNet, ResNetV2, ResNeXt

InceptionV3

InceptionResNetV2

MobileNet

MobileNetV2
120 6 Anexos

DenseNet

NASNet

Todas estas arquitecturas son compatibles con todos los backends (TensorFlow, Theano y
CNTK), y al crear una instancia, los modelos se construirán de acuerdo con el formato de
datos de imagen establecido en su archivo de configuración de Keras en /.keras/keras.json.2

6.3. GPU
Consultando varios artı́culos de investigación sobre los temas de Deep Learning y redes neu-
ronales convolucionales, descubrimos la existencia de la competición de Imagenet y de los
resultados del equipo de la universidad de Toronto en la competición el año 2012 [57] . La
competición ImageNet (Large Scale Visual Recognition Challenge [29] ) se realizaba desde
el 2010, y por aquel entonces se habı́a convertido en un referente en la comunidad de visión
por computador para el reconocimiento de objetos a gran escala. En 2012 Alex Krizhevsky,
Ilya Sutskever y Geoffrey E. Hilton emplearon por primera vez aceleradores hardware GPU
(graphical processing units) [66] , usados ya en ese momento en los centros de supercompu-
tación para aumentar la velocidad de ejecución de aplicaciones que requieren realizar muchos
cálculos. Por ejemplo, en aquella época el BSC disponı́a ya de un supercomputador llamado
MinoTauro, de 128 nodos Bull505, equipados con 2 procesadores Intel y 2 GPUs Tesla M2090
de NVIDIA cada uno de ellos. Con un rendimiento pico de 186 Teraflops 3 , puesto en marcha
en septiembre del año 2011. Hasta el 2012, el incremento de capacidad de computación que
cada año conseguı́amos de los ordenadores era gracias a la mejora de la CPU. Sin embargo,
desde entonces el incremento de capacidad de computación para Deep Learning no ha sido
solo gracias a ellas, sino también a los nuevos sistemas masivamente paralelos basados en
aceleradores GPU, que resultan decenas de veces más eficientes que las CPU tradicionales.
Las GPU se desarrollaron originalmente para acelerar el juego 3D que requiere el uso repe-
tido de procesos matemáticos que incluyen distintos cálculos sobre matrices. Inicialmente,
compañı́as como Nvidia y AMD desarrollaron estos chips rápidos y masivamente paralelos
para tarjetas gráficas dedicadas a videojuegos: pronto se vio que las GPU útiles para juegos
3D. Eran muy adecuadas también para acelerar cálculos sobre matrices numéricas; por ello,
este hardware en realidad benefició a la comunidad cientı́fica, y en el 2007 Nvidia lanzó el
lenguaje de programación CUDA [37] para poder programar sus GPU. Gracias a ello, cen-
tros de investigación en supercomputación como el BSC empezaron a usar clusters de GPU
para acelerar aplicaciones numéricas. Pero como veremos en este libro, las redes neuronales
artificiales básicamente realizan operaciones matriciales que son también altamente parale-
lizables. Y esto es lo que hizo en 2012 el equipo de Alex Krizhevsky: entrenó su algoritmo
2
para más información de los modelos de keras consulte: https://keras.io/applications/
3
TeraFlops es una medida de rendimiento en informática, especialmente en cálculos cientı́ficos. Se refiere a
1.000.000.000.000 operaciones en coma flotante por segundo.
6.3 GPU 121

Deep Learning AlexNet con GPU [4]. Desde entonces se empezaron a usar las GPU para
esta competición, y en estos momentos todos los grupos que investigan en Deep Learning
están usando este hardware o alternativas equivalentes que han aparecido recientemente.

Figura 6-16: Tiempo total de entrenamiento del modelo en relación con la GPU [67]

Aquı́, la GPU es la más rápida de todas las configuraciones de la plataforma, pero hay otras
tendencias curiosas: el rendimiento entre 32 vCPU y 64 vCPU es similar, y la biblioteca
compilada TensorFlow es de hecho una mejora significativa en la velocidad de entrenamiento
pero solo para 8 y 16 vCPUs.

Ahora, veamos el mismo conjunto de datos con un enfoque de red neuronal convolucional
para la clasificación de dı́gitos:
122 6 Anexos

Figura 6-17: Tiempo total de entrenamiento del modelo en relación con la GPU [67]

Como es lógico, las GPU son más del doble de rápidas que cualquier enfoque de CPU en las
CNN.
Bibliografı́a
[1] Piec (2013-2017) página: 53. accedido el 15-06-2018.

[2] Elaboración propia, 2018.

[3] A.J.Maren, C. y. R. ”handbook of neural computing applications”. ed. academic


press., 1990.

[4] Alex Krizhevsky, I. S. . G. E. H. Imagenet classification with deep convolutional


neural networks, 2012.

[5] Approach, D. L. A. P. Josh patterson, adam gibson, 2017.

[6] Ballard., D. Brain computation as hierarchical abstraction., 2015.

[7] Barber., D. Bayesian reasoning and machine learning, 2018.

[8] Camillo Golgi, Santiago Ramón, C. La técnica de impregnación argéntica de


golgi. conmemoración del centenario del premio nobel de medicina (1906)., 2016.

[9] Campbell, J. B., and Wynne, R. H. Introduction to remote sensing, 2011.

[10] Company., W. N. . Psychological science, 2nd edition., 2007.

[11] DataKind.org. Using satellite imagery to find villages in need. url


http://www.datakind.org/projects/using-the-simple-to-be-radical, 2013. accedido el 20-
11-2018.

[12] David E. Rumelhart, G. E. H. . R. J. W. Learning representations by back-


propagating errors. urlhttps://www.nature.com/articles/323533a0, 1986.

[13] de histologı́a vegetal y animal., A. Tipos celulares: Neurona. url


https://mmegias.webs.uvigo.es/8-tipos-celulares/neurona.php/, 2012.

[14] Deng, L., and Yu, D. A deep learning approach, 2014.

[15] Departamento Administrativo Nacional de Estadı́stica, D. Necesidades


básicas insatisfechas -nbi-. url https://www.dane.gov.co/index.php/estadisticas-por-
tema/pobreza-y-condiciones-de-vida/necesidades-basicas-insatisfechas-nbi, 2015. acce-
dido el 21-11-2018.
124 Bibliografı́a

[16] Fukushima, K. Neocognitron a self-organizing neural network model for a mechanism


of pattern recognition unaffected by shift in position, 1980.

[17] Goodspeed., E. A diagram showing a perceptron updating its linear boundary as


more training examples are added., 2015.

[18] Ian Goodfellow, e. a. Deep learning, 2016.

[19] Inc, G. Going deeper with convolutions, 2017.

[20] José H. Gonzales, V. J. M. Redes neuronales artificiales: fundamentos, modelos y


aplicaciones., 1995.

[21] k. y Juliet G.., L. AnalogÍa entre las redes neuronales biolÓgicas y artificiales. url
https://rneuronales.wordpress.com/, 2012.

[22] Karen Simonyan, A. Z. Very deep convolutional networks for large-scale image
recognition, 2015.

[23] Karim., R. 10 gradient descent optimisation algorithms + cheat sheet.


urlhttps://towardsdatascience.com/10-gradient-descent-optimisation-algorithms-
86989510b5e9, 2018.

[24] Kentish, B. Bill gates starts new project using satellites to help people after natural
disasters, ee.uu: Indepent, 2017.

[25] Keras. Getting started with the keras sequential model. urlhttps://keras.io/getting-
started/sequential-model-guide/.

[26] Keras. Keras: The python deep learning library. urlhttps://keras.io/.

[27] Kingma, D. P., and Ba., J. L. Adam: a method for stochastic optimization, 2015.

[28] Krizhevsky, Sutskever, and Hinton, E. Imagenet classification with deep con-
volutional neural networks, 2012.

[29] Krizhevsky, A. Sutskever, I., and E, H. G. Imagenet classification with


deep convolutional neural networks nips 2012: Neural information processing systems.
urlhttp://cort.as/-H9Lm, 2012.

[30] LARA, F. Fundamentos de redes neuronales artificiales, 2015.

[31] LeCun, Y., Huang, F., and Bottou, L. Learning methods for generic object recog-
nition with invariance to pose and lighting. in: Computer vision and pattern recognition.
cvpr, 2004.
Bibliografı́a 125

[32] LeCun, Yann;Bengio, Y. G. Aprendizaje profundo.la naturaleza, 2015.

[33] Matesanz, E. F. Relaciones entre la máquina de boltzmann i la red neuronal celular,


2015.

[34] Michael. Ranking popular deep learning libraries for data science.
urlhttps://blog.thedataincubator.com/2017/10/ranking-popular-deep-learning-
libraries-for-data- science/, 2017. accedido el 15-06-2018.

[35] Microsoft. Ajuste de los hiperparámetros de un modelo mediante azure machine


learning service, 2018.

[36] Muñoz., J. M. Percepción remota “fundamentos de teledetección espacial”. recopila-


ción, comisión natural de agua, jefatuta de control cartografico., 2005.

[37] Nvidia. Procesamiento paralelo cuda, https://www.nvidia.es/object/cuda-parallel-


computing-es.html.

[38] OpenAI. Ai and compute. url https://openai.com/blog/ai-and-compute/, 2015.

[39] Pedro Isasi Vifiuela, I. M. G. L. Redes neuronales artificiales: Un enfoque práctico,


2004.

[40] Polamuri, S. Difference between softmax function and sigmoid function.


urlhttp://dataaspirant.com/2017/03/07/difference-between-softmax-function-and-
sigmoid-function/, 2017.

[41] Quora, A. S. What-is-max-pooling-in-convolutional-neural-networks, 2019.

[42] Radio, C. En colombia 1.209.000 personas no tienen servicio de energı́a eléctrica.


urlhttps://www.caracol.com.co, 2005. accedido el 15-05-2018.

[43] Research, G. Tensorflow: Large-scale machine learning on heterogeneous distributed


systems, 2015.

[44] Rivera., M. Descenso de gradiente y variaciones sobre el tema.


urlhttp://personal.cimat.mx:8181/ mrivera/cursos/optimizacion/descensog rade stocastico/
descensog rade stocastico.htmlmomentum − adaptable − adam, 2018.

[45] RodriguezRamos., J. Brains vs. computers.


urlhttps://www.scientificamerican.com/article/computers-vs-brains/, 2018.

[46] Rosenblatt, F. The perceptron: a probabilistic model for information storage and
retrieval in the brain. psychological review, 1958.

[47] R.Rubio. .aplicaciones médicas de las redes neuronales”. novatica, vol.16., 1990.
126 Bibliografı́a

[48] Sharma., R. What is the differences between artificial neural network, computer
science, and biological neural network, 2017.

[49] Shetty., B. Supervised machine learning: Classification.


urlhttps://towardsdatascience.com/supervised-machine-learning-classification-
5e685fe18a6d, 2018.

[50] SILVEIRA., K. 10 diferencias entre tu cerebro y una computadora., 2018.

[51] SitiosUpme. Sitiosupme. urlhttp://sig.simec.gov.co/SitiosUpme/. accedido el 14-06-


2018.

[52] Songho. Convolution. urlhttp://www.songho.ca/dsp/convolution/


convolution.htmlconvolution2 d, 2019.

[53] Srivastava, Hinton, K. S., and Salakhutdinov. Dropout: A simple way to


prevent neural networks from overfitting, 2017.

[54] Sutskever, and Hinton, G. Imagenet classification with deep convolutional neural
networks. advances in neural information processing systems, 2012.

[55] Sánchez., J. A. A. Tratamiento de la fotografı́a digital, 2008.

[56] TensorFlow. Tensorflow core, tutoriales, 2019.

[57] TensorFlow. Tensorflow guide: Keras. urlhttps://www.tensorflow.org/guide/keras,


2019.

[58] TensorFlow. What do all the colors mean? url https://playground.tensorflow.org,


2019.

[59] Torres, J. Hello world en tensorflow - para iniciarse en la programación del deep
learning, 2016.

[60] Torres, J. Deep learning, introducción práctica con keras, primera parte, 2018.

[61] V., A. S. Understanding activation functions in neural networks. urlhttp://cort.as/-


H9nb, 2017.

[62] Varshney, George H. Che, A. N. Targeting villages for rural development using
satellite image analys, 2015.

[63] Vedaldi, Lenc, and Matconvnet, K. Convolutional neural networks for matlab.
acm multimedia, open source software competition, 2015. Oxford University.

[64] Vázquez, F. Una introduccin .extraña.al deep learning. url https://medium.com/datos-


y-ciencia/una-introduccion-extraña-al-deep-learning-3407e05e0483, 2018.
Bibliografı́a 127

[65] Walia., A. S. Types of optimization algorithms used in neural networks and ways to
optimize gradient descent. urlhttps://towardsdatascience.com/types-of-optimization-
algorithms-used-in-neural-networks-and-ways-to-optimize-gradient-95ae5d39529f, 2017.

[66] Weiskopf, D. Gpu-based interactive visualizaction techniques, 2015.

[67] Woolf, M. Benchmarking tensorflow on cloud cpus: Cheaper deep learning than cloud
gpus. url Disponible en: https://minimaxir.com/2017/07/cpu-or-gpu/, 2017.

[68] Yoshua, B., Aaron, C., and Pascal, V. Representation learning: A review and
new perspectives, 2013.

También podría gustarte