Ingeniería de Sistemas y Computación. Facultad de Ingenierías. Universidad Tecnológica de Pereira.
Implementación de Red Neuronal
Computación Blanda
Neural Network Implementation
Soft Computing
Autor 1: Alejandro Osorio Trujillo
Autor 2: Andrés Felipe Ospina Gualteros
Ingeniería de Sistemas y Computación, Universidad Tecnológica de Pereira, Pereira, Colombia
Correo-e: [Link]@[Link], [Link]@[Link]
Resumen— Las redes neuronales son unas de las principales basada en la corrección del error. A este modelo le llamó
herramientas utilizadas en machine learning. Como la parte Perceptrón en 1958.
‘neuronal’ en su nombre lo indica, son sistemas inspirados en el [2]
cerebro; esto buscando replicar la forma en la que los seres humanos Ahora bien, como esta implementación es una aplicación de
pensamos. Formalmente, las redes neuronales son un modelo
las redes neuronales convolucionales, se dará una definición
computacional basado en un gran conjunto de unidades neuronales
simples que se interconectan entre ellas. [1]
de éstas: Una red neuronal convolucional es un tipo de red
neuronal artificial donde las neuronas corresponden a campos
receptivos de una manera muy similar a las neuronas en la
Palabras clave— Inferencia, Red Neuronal, Aprendizaje, corteza visual primaria (V1) de un cerebro biológico. Este tipo
Inteligencia Artificial, Algoritmo, Neurona, Entrada, Salida. de red es una variación de un perceptrón multicapa, sin
embargo, debido a que su aplicación es realizada en matrices
Abstract— Neural networks are one of the main tools used in bidimensionales, son muy efectivas para tareas de visión
machine learning. As the 'neuronal' part in its name indicates, they artificial, como en la clasificación y segmentación de
are systems inspired by the brain; this is looking to replicate the way imágenes, entre otras aplicaciones. [3]
in which human beings think. Formally, neural networks are a
computational model based on a large set of simple neural units that
interconnect with each other.
II. DESARROLLO DEL TEMA
Key Word — Inference, Neuronal Network, Learning, Artificial
Intelligence, Algorithm, Neuron, Input, Output. ALGORITMO
Entrenamiento:
I. INTRODUCCIÓN import sys
import os
Las redes neuronales se componen de capas de entrada y from [Link] import
salida, así como generalmente una capa oculta, la capa oculta ImageDataGenerator
se encarga de transformar los datos de entrada en algo que la from [Link] import optimizers
capa de salida pueda usar. Las redes neuronales son excelentes from [Link] import Sequential
herramientas para encontrar patrones que son muy complejos from [Link] import Dropout, Flatten,
o numerosos para que un programador extraiga y le enseñe a Dense, Activation
la máquina a reconocerlos. from [Link] import Convolution2D,
MaxPooling2D
Una de las principales características de las redes neuronales from [Link] import backend as K
es su capacidad para aprender a partir de alguna fuente de
información interactuando con su entorno. El psicólogo Frank K.clear_session()
Rosenblat desarrolló un modelo simple de neurona basado en
el modelo de McCulloch y Pitts y en una regla de aprendizaje
2 Ingeniería de Sistemas y Computación. Facultad de Ingenierías. Universidad Tecnológica de Pereira.
[Link](Dense(clases, activation='softmax'))
data_entrenamiento = './data/entrenamiento'
data_validacion = './data/validacion' [Link](loss='categorical_crossentropy',
optimizer=[Link](lr=lr),
""" metrics=['accuracy'])
Parameters
""" cnn.fit_generator(
epocas=20 entrenamiento_generador,
longitud, altura = 150, 150 steps_per_epoch=pasos,
batch_size = 32 epochs=epocas,
pasos = 1000 validation_data=validacion_generador,
validation_steps = 300 validation_steps=validation_steps)
filtrosConv1 = 32
filtrosConv2 = 64 target_dir = './modelo/'
tamano_filtro1 = (3, 3) if not [Link](target_dir):
tamano_filtro2 = (2, 2) [Link](target_dir)
tamano_pool = (2, 2) [Link]('./modelo/modelo.h5')
clases = 5 cnn.save_weights('./modelo/pesos.h5')
lr = 0.0004
Prediccción:
##Preparamos nuestras imagenes import numpy as np
from [Link] import load_img,
entrenamiento_datagen = ImageDataGenerator( img_to_array
rescale=1. / 255, from [Link] import load_model
shear_range=0.2,
zoom_range=0.2, longitud, altura = 150, 150
horizontal_flip=True) modelo = './modelo/modelo.h5'
pesos_modelo = './modelo/pesos.h5'
test_datagen = ImageDataGenerator(rescale=1. / 255) cnn = load_model(modelo)
cnn.load_weights(pesos_modelo)
entrenamiento_generador =
entrenamiento_datagen.flow_from_directory( def predict(file):
data_entrenamiento, x = load_img(file, target_size=(longitud, altura))
target_size=(altura, longitud), x = img_to_array(x)
batch_size=batch_size, x = np.expand_dims(x, axis=0)
class_mode='categorical') array = [Link](x)
result = array[0]
validacion_generador = test_datagen.flow_from_directory( answer = [Link](result)
data_validacion, print (result)
target_size=(altura, longitud),
batch_size=batch_size, if answer == 0:
class_mode='categorical') print("pred: Perro")
elif answer == 1:
cnn = Sequential() print("pred: Gato")
[Link](Convolution2D(filtrosConv1, tamano_filtro1, elif answer == 2:
padding ="same", input_shape=(longitud, altura, 3), print("pred: Gorila")
activation='relu')) elif answer == 3:
[Link](MaxPooling2D(pool_size=tamano_pool)) print("pred: Cerdo")
elif answer == 4:
[Link](Convolution2D(filtrosConv2, tamano_filtro2, print("pred: Vaca")
padding ="same"))
[Link](MaxPooling2D(pool_size=tamano_pool)) return answer
[Link](Flatten()) predict("[Link]")
[Link](Dense(256, activation='relu'))
[Link](Dropout(0.5))
Ingeniería de Sistemas y Computación. Facultad de Ingenierías. Universidad Tecnológica de Pereira. 3
EXPLICACIÓN ALGORITMO incompleto), y finalmente se tiene horizontal flip con el fin de
que el algoritmo entienda de direccionalidad.
La aplicación en Python se divide en dos procedimientos: En el procesamiento de imágenes de validación se tiene que el
entrenar y predecir. reescalamiento de imágenes lo que hace es regresarlas a su
En entrenar, se tienen las siguientes librerías importadas: tamaño original.
• Sys y os: Sirven para movernos en carpetas dentro Ahora se usarán estas dos variables para generar las imágenes
del sistema operativo. que se usarán en la red neuronal; donde primero obtenemos
• ImageDataGenerator: Sirve para preprocesar las las imágenes de entrenamiento del directorio, se cambia su
imágenes que serán entregadas al algoritmo. tamaño a altura y longitud definidos, de igual forma con batch
• Optimizers: Optimizador para entrenar el algoritmo. size, y class mode es categorical ya que las imágenes se
• Sequential: Permite hacer redes neuronales clasificarán en categorías (Gato, Perro, Gorila, Cerdo y Vaca).
secuenciales (Con sus capas en orden). Se realiza el mismo proceso a las imágenes de validación.
• Dropout, Flatten, Dense, Activation: Ambas variables ya tienen las imágenes para entrenar la red
• Convolution2D, MaxPoolling2D: Capas en las que se neuronal.
harán las convoluciones y el max pooling. Ahora se procede a crear la red neuronal convolucional,
primero se define que la red será secuencial.
• Backend: Si hay una sesión de keras corriendo en el
Primero se define la primera capa con sus respectivos filtros,
background, la librería mata el proceso para correrlo
desde cero. tamaño de filtro, padding como same, el input shape que sería
la altura y longitud y la activación como relu.
Primero se limpia la sesión.
Luego se añade una capa de pooling, con su pool size definido
Posteriormente se tienen dos variables que son las direcciones
anteriormente.
de las imágenes de entrenamiento y de validación.
Después de esto se añade la siguiente capa, con sus filtros
Las épocas son el número de veces que se iterará sobre el set
definidos, su tamaño, su padding como same igualmente y la
de datos en el entrenamiento.
Altura y longitud son el tamaño al que se procesarán las activación como relu.
Junto a esta capa se añade la segunda capa de pooling con su
imágenes. (100px x 100px).
pool size definido.
Batch size es el número de imágenes que serán enviadas al
Continuando, se añade un flatten para hacer la imagen plana
computador en cada paso para procesarlas.
ya que estaba muy profunda antes.
Pasos es el número de veces que se procesará la información
Luego se añade un dense con 256 neuronas y un activation
en cada una de las épocas.
Los pasos de validación son la cantidad de pasos que se como relu, esto con el propósito de añadir una capa ‘normal’
en el que las neuronas se conectarán con las neuronas de la
correrán con el set de datos de validación, al final de cada
capa pasada.
iteración, para comprobar que el algoritmo sí esté
El dropout que se agrega en este paso sirve para apagar la
aprendiendo.
mitad de las neuronas en cada paso, esto con el fin de que la
Los filtros son, como lo dice su nombre, los filtros que se
red no cree un solo camino, sino que se pueda adaptar a
aplican en cada convolución, es decir, después de la primera
información nueva creando caminos alternos.
convolución la imagen tendrá una profundidad de 32 y en la
Se añade otra capa densa, que sería la capa de salida, con
segunda tendrá una profundidad de 64.
cinco clases y una activación igual a softmax, esto lo que hace
Posteriormente se tienen los tamaños de los filtros de cada
es que toma el valor con el porcentaje más alto y lo define
convolución (Altura y longitud).
como la clasificación correcta.
Tamaño de pool es el tamaño del filtro que se usará en el max
pooling. Luego se hace un compile que son los parámetros para
optimizar el algortimo. Se define la función de pérdida como
Las clases son la cantidad de clases en las que se quiere
categorical crossentry, el optimizador va a ser lr definido
clasificar, cinco en este caso (Gato, Perro, Gorila, Cerdo y
anteriormente y la métrica con la que se optimizará el
Vaca).
algortimo es con el porcentaje de qué tan bien está
Learning rate es que tan grandes serán los ajustes que hará la
aprendiendo la red neuronal.
red neuronal para acercarse a la solución óptima.
Continuando con el algoritmo, sigue el proceso de Luego se alimenta al algoritmo con las imágenes de
enternamiento, se da el número de pasos y épocas como
preprocesamiento de las imágenes en el que primero se define
variables, también se agregan las imágenes de validación con
el generador, en este caso de imágenes de entrenamiento,
sus respectivos pasos.
dentro de él se reescalan las imágenes para tener los pixeles en
Después de esto, se guardará buscar el modelo en un archivo;
un rango de 0-1 y no de 0-255, esto con el fin de hacer más
esto con el fin de no tener que entrenar la red en cada corrida
eficiente el entrenamiento. Sheer range va a inclinar un poco
del algoritmo, de igual forma se guardan los pesos.
las imágenes para que el algoritmo entienda que los animales
pueden estar inclinados, zoom rango hace zoom a algunas
imágenes con el mismo fin que la variable anterior (Que no
todas las imágenes son iguales, podría aparecer un animal
____________________________
1. Las notas de pie de página deberán estar en la página donde se citan. Letra Times New Roman de 8 puntos
4 Ingeniería de Sistemas y Computación. Facultad de Ingenierías. Universidad Tecnológica de Pereira.
DIFICULTADES
• Inicialmente, para reducir el tiempo de entrenamiento
se redujeron las épocas; esto llevo a que el algoritmo
fuera poco preciso en la clasificación.
• De igual manera, al principio se usaron pocas
imágenes de entrenamiento; esto también llevo a que
el algoritmo no fuera preciso en sus clasificaciones.
III. CONCLUSIONES
Ilustración 1 algoritmo en ejecución
• Las redes neuronales son ideales para encontrar
patrones.
En predecir se tienen las siguientes librerías:
• Este tipo de redes se pueden implementar en la vida
• Numpy.
moderna en ámbitos como análisis de series
• Load_img e img_to_array: Carga las imágenes y las temporales, procesamiento de imágenes,
permite transformar en arreglos. reconocimiento automático del habla, diagnósticos
• Load_model: Sirve para cargar el modelo. médicos, entre otros. [2]
Primero se definen la longitud y la altura, con los mismos
• Las redes neuronales artificiales pueden ser
valores que en entrenamiento.
Posteriormente se define la ruta del modelo y de los pesos utilizadas eficazmente para clasificar muestras,
para luego cargarlos. es decir, asignar los datos que se recogen a
Se define la red neuronal y se le carga el modelo; de igual diferentes clases o categorías. [4]
forma se cargan los pesos. • Entre más imágenes de entrenamiento tenga el
Se define una función para predecir qué clase debe de ser la algoritmo, mejores serán las clasificaciones.
imagen (Gato, Perro, Gorila, Cerdo y Vaca), en la cual se • De igual forma, con un número mayor de
carga la imagen con la altura y longitud definidas (100px x épocas, la predicción será más acertada.
100px); luego se convierte la imagen en un arreglo de valores
que la representa.
Después de esto, en el eje 0 se añade una dimensión extra, con
el fin de procesar la información sin problemas. REFERENCIAS
Se llama a la red con la variable arreglo, buscando que haga
una predicción sobre una imagen. Al ser un arreglo de tamaño [1] Red neuronal artificial. Disponible en:
cinco, en la posición que considere sea la clase, tendrá un 1. [Link]
Luego se encuentra cual es la posición con el mayor valor
dentro del arreglo, siendo esta la respuesta. [2] Perceptrón simple y multicapa. Disponible en:
Posteriormente se hace un if para que imprima la clasificación [Link]
de los animales, ya sea un gato, un perro, un gorila, un cerdo o
una vaca. [3] Redes neuronales convolucionales. Disponible en :
Finalmente se llama a la función para predict con el archivo [Link]
que queramos predecir. les
[4] Cómo funcionan las redes neuronales artificiales.
Disponible en:
[Link]
artificiales-funcionamiento-y-aplicacion-al-negocio
Ilustración 2 predicciones