• No se han encontrado resultados

Entrenamiento del modelo y clasificación de los elementos

4. Implementación de SyncBoards

4.1 Arquitectura del sistema

4.2.1 Entrenamiento del modelo y clasificación de los elementos

El paqueteNetworkModel contiene la lógica del modelo de red neuronal utilizado para clasificar los elementos del tablero.

Para la implementación de esta red se hizo uso de la biblioteca TensorFlow [26]. Esta biblioteca, desarrollada por Google, se especializa principalmente en redes neuronales y aprendizaje profundo. Algunas de las principales ventajas de esta biblioteca, incluyen una alta performance en el cómputo de largas operaciones matemáticas, mediante el uso de GPUs. Además, la biblioteca facilita la escalabilidad del entrenamiento de redes neuronales.

El paquete ModelTraining contiene las funcionalidades necesarias para entrenar y medir la eficacia del modelo. Además, permite persistir el modelo entrenado, de forma que pueda ser posteriormente utilizado. Por otro lado, este paquete contiene la funcionalidad necesaria para generar automáticamente conjuntos de imágenes de cada elemento a clasificar. Por último, provee la funcionalidad necesaria para permitir que el conjunto de imágenes pueda ser utilizado por la red neuronal.

Con el objetivo de manejar las imágenes de forma eficiente, se utilizan las bibliotecas de Python SciPy y NumPy. Estas bibliotecas son ampliamente utilizadas en el ámbito de la computación científica. La biblioteca NumPy brinda soporte de arrays N-dimensionales junto con funcionalidades matemáticas que permiten operar sobre los arrays de forma muy eficiente [38]. Por su parte, SciPy utiliza NumPy con el fin de proveer módulos especializados en estadísticas, optimizaciones, álgebra lineal y procesamiento de imágenes, entre otros [39].

En este contexto, las imágenes de entrada del modelo se representan como NumPy arrays de dos dimensiones. Cada dimensión del array contiene 28 valores, representando el color de cada píxel de la imagen, en escala de grises.

A partir del modelo definido en el paquete NetworkModel

​ , se construye un grafo

dirigido, compuesto por nodos y sus conexiones. Cada nodo tiene una funcionalidad bien definida, las cuales, incluyen la implementación de operaciones matemáticas, la entrada de datos y, la lectura y escritura de variables persistentes dentro del grafo. Las conexiones representan relaciones de entrada y salida entre los nodos. Estas conexiones utilizan matrices multidimensionales de tamaño dinámico, conocidas como Tensors. Los nodos son ejecutados paralela y asincrónicamente, una vez que todos los Tensors en sus conexiones entrantes estén disponibles [26].

En la figura 4.3 se presenta el diagrama de clases de los paquetes NetworkModel y

ModelTraining

​ . Estos paquetes están compuestos por 5 clases, que dan lugar a la

Figura 4.3 - Diagrama de clases de los paquetes NetworkModel y ModelTraining.

La clase ModelConfig

la cantidad de canales en las convolutional layers, la cantidad de neuronas en las capas interconectadas, entre otras. Esta clase utiliza el patrón de diseño Singleton. De esta forma, en toda la aplicación se comparte una única instancia a esta clase.

La clase Model contiene la implementación de la red neuronal utilizada con el fin de clasificar los diferentes elementos. En la figura 4.4 se presenta un fragmento del código que da lugar a la implementación de esta red. En el código, se puede apreciar la implementación de las diferentes capas de la red neuronal. La salida de cada capa es conectada a la capa siguiente, hasta llegar a la capa de salida. Por último, se da lugar a la clasificación mediante el uso de la técnica softmax

​ . Esta técnica retornara las

Figura 4.4 - Fragmento de código de la red neuronal implementada.

La claseTrainingSession tiene como objetivo principal crear el grafo de flujo de datos. En esta clase, se define la sesión en la que se ejecutará el entrenamiento. Los Tensors contenidos por el grafo, serán evaluados únicamente en el ámbito de esta sesión. Además, esta clase contiene la funcionalidad necesaria para almacenar el modelo, una

los pesos y bias de cada neurona, y sus conexiones. Este archivo puede ser posteriormente utilizado para realizar clasificaciones.

La clase Trainer contiene las técnicas y funcionalidades necesarias para realizar el entrenamiento del modelo. Para esto, se utiliza la seccion creada por la clase

TrainingSession

​ . Dentro de esta sesión, se itera sobre el modelo de forma tal que en

cada paso se minimice la entropía cruzada.

En la figura 4.5 se presenta el diagrama de secuencias del proceso de entrenamiento del modelo, a partir de las interacciones entre las clases NetworkModel y

ModelTraining

​ .

Figura 4.5 - Diagrama de secuencias del entrenamiento del modelo.

nuevas imágenes y preparar los conjuntos de imágenes para ser utilizadas por la red neuronal, siguiendo las técnicas detalladas en la sección 3.1.1.3.

A continuación, el desarrollador comienza una nueva sesión de entrenamiento mediante la clase TrainingSession

​ . Luego, esta clase se comunica con la clase Trainer

con el fin de comenzar a entrenar el modelo.

Previamente a comenzar con el entrenamiento, la clase Trainer obtiene el modelo de red neuronal de la clase Model

​ . En cada iteración del entrenamiento, por medio del

método get_train_step

​ , se introducen 10 imágenes en la red y se optimizan los

parámetros, de forma tal que se reduzca la entropía cruzada. Este proceso se explica en detalle en la sección 3.1.1.4.

Cada 50 iteraciones, se mide la eficacia de la red. Si ésta empeora por 5 iteraciones consecutivas se considera que el algoritmo ha convergido, por lo que se da por concluido el entrenamiento.

El modelo ya entrenado es retornado por la clase Trainer

​ . Por último, la clase

TrainingSession persiste este modelo, para poder ser usado posteriormente en la clasificación de imágenes.

Documento similar