Está en la página 1de 7

VICERRECTORADO DOCENTE Código: GUIA-PRL-001

CONSEJO ACADÉMICO Aprobación: 2016/04/06

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación

PRÁCTICA DE LABORATORIO

CARRERA: COMPUTACION ASIGNATURA:

NRO. PRÁCTICA: 5 TÍTULO PRÁCTICA: DESARROLLO DE SERVICIO DE RED NEURONAL CNN EN


LA WEB Y DESPLIEGUE EN LA NUBE PUBLICA

OBJETIVO ALCANZADO:

Aplicar los conocimientos sobre el despliegue en la nube pública, mediante el uso del framework Django

Utilizar los modelos de redes neuronales para solucionar problemas, mediante el entrenamiento de una Red
Convolucional.

ACTIVIDADES DESARROLLADAS

1. Para el despliegue del servicio de una red convolucional, es necesario crear un ambiente en el cual se
deberá desarrollar el software, por lo que primero procedemos a crear un ambiente virtual en el software
anaconda, el cual contiene diferentes framework que nos permitirán utilizar código Python. Este proyecto
será cargado en un repositorio de github.

Código implementado:
conda create AmbienteRedNeuronal

2. Una vez ya con nuestro ambiente de trabajo deberemos instalar las diferentes librerías que son
necesarias para la culminación de nuestro sistema convolucional, las librerías instaladas se muestran a
continuación:
• Tensorflow
• Keras
• Django
• Djangorestframework
• drf-yasg
• numpy
• pandas
• sklearn
• gunicorn
• pillow
• polls
• markdown
• django-filte

Resolución CS N° 076-04-2016-04-20
VICERRECTORADO DOCENTE Código: GUIA-PRL-001

CONSEJO ACADÉMICO Aprobación: 2016/04/06

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación

Código utilizado:

pip install tensorflow

pip install Keras

pip install django

pip install djangorestframework

pip install drf-yasg

pip install numpy

pip install pandas

pip install sklearn

pip install gunicorn

pip install pillow

pip install polls

pip install markdown

pip install django-filte

3. Una vez ya instalados nuestras librerías y configurada nuestro ambiente de trabajo procedemos a
implementar el código que será utilizado para el desarrollo del proyecto.

Se implementa el siguiente código dentro de la carpeta apiSNN y en el archivo urls.py

url(r'^predecir/',views.MachineLearning.index)

url(r'^$', views.MachineLearning.index)

el siguiente código nos permite redirigir las páginas con sus diferentes acciones que existen dentro de la
clase MachineLearning.

4. Dentro de la clase apiSNN se modifica el archivo views.py para crear la clase MachineLearning.
Codigo implementado:
class MachineLearning():
def index(request):
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if request.method == 'POST':
archivo = request.FILES['imagen']
fileStorage = FileSystemStorage()
fileStorage.save(archivo.name, archivo)
file = BASE_DIR +'/media/' + archivo.name

Resolución CS N° 076-04-2016-04-20
VICERRECTORADO DOCENTE Código: GUIA-PRL-001

CONSEJO ACADÉMICO Aprobación: 2016/04/06

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación

retorno = modeloCNN.predecir(file)
return render(request, "Resultado.html", {"direc":file,"fruta":
retorno.get('pred'), "porcentaje": retorno.get('porcentaje')})

return render(request, "frutas.html")

Se crea la clase MachineLearning y dentro de esta se crea el método index que recibe como parámetro un
request que nos sirve para recibir una solicitud enviada por un formulario por parte de la página principal
frutas.html, la variable BASE_DIR donde se almacena la ruta local de las imágenes para posteriormente
guardarlas. Se crea una condición que si recibe una petición realizada por el método POST, posteriormente
se recupera la carga de un archivo realizado con request.FILES['imagen'] y el nombre de la entrada del
formulario. Cuando se recupera se utiliza un objeto FileSystemStorage() que permite almacenar archivos
en un sistemas de archivos local luego con file = BASE_DIR +'/media/' + archivo.name se crea la ruta
de la imagen dentro de carpeta media y con esto se manda al método predecir dentro de archivo
modeloCNN.py que se encuentra en la carpeta Lógica que está dentro de la carpeta apiSNN, luego con
return render(request, "Resultado.html", {"fruta": retorno.get('pred'), "porcentaje":
retorno.get('porcentaje')}) se retorna los resultados a la página Resultado.html con los valores
obtenidos de variables ‘pred’ y ‘porcentaje’ . Si no existe la petición permanecerá dentro de la misma página.

5. Se crea el archivo modeloCNN.py dentro de la carpeta Lógica que está dentro de la carpeta apiSNN,
donde se encuentran el modelo predecir y cargarModelo que nos sirven para realizar la predicción de la
imagen.

Método predecir

def predecir(url_imagen):

imagen = image.load_img(path=url_imagen, target_size=(35, 35, 3))

imagen = image.img_to_array(imagen)

imagen /= 255

imagen = np.expand_dims(imagen, axis= 0)

modelo = cargarModelo(r’apiSNN/3Logica/modelo’, r’apiSNN/3Logica /pesos’)

prediccion = modelo.predict(imagen)

leo = None

for I in 3 3:

leo = i

for l in leo:

print(l*100)

3maximo = max(leo)

I, = np.where(np.isclose(leo, maximo))

retorno = dict()

if i[0] == 0:

Resolución CS N° 076-04-2016-04-20
VICERRECTORADO DOCENTE Código: GUIA-PRL-001

CONSEJO ACADÉMICO Aprobación: 2016/04/06

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación

retorno[‘pred’] = ‘MANZANA’

retorno[‘porcentaje’] = round(4áximo*100, 2)

elif i[0] == 1:

retorno[‘pred’] = ‘MANDARINA’

retorno[‘porcentaje’] = round(4áximo*100, 2) …
El siguiente método nos sirve para realizar la predicción de una imagen que ha sido cargada dentro de la
aplicación web, donde es recuperado de una dirección y se especifican sus dimensiones y el numero de
canales, imagen = image.img_to_array(imagen) luego se convierte en un array y se realiza su
normalización, luego se manda a realizar obtiene con modelo =cargarModelo(r’apiSNN/4Logica/modelo’,
r’apiSNN/4Logica /pesos’) el modelo y se realiza la predicción de la imágenes el según el método donde
tenemos almacenados el modelo y los pesos de la red neuronal, luego se crea un bucle for para identificar
los resultados y la categoría a la que pertenece una imagen mediante el uso de diccionarios.

Método cargarModelos

def cargarModelo(url_modelo, url_pesos):

k.reset_uids()

with open(url_modelo + '.json', 'r') as f:

modelo = model_from_json(f.read())

modelo.load_weights(url_pesos + '.h5')

return modelo

El siguiente método nos permite cargar los modelos que hemos obtenido mediante la creación de la red
convolucional, realizada en la practica anterior, los archivos están ubicados dentro de esta misma carpeta.

6. Carga de la aplicación en la nube

Resolución CS N° 076-04-2016-04-20
VICERRECTORADO DOCENTE Código: GUIA-PRL-001

CONSEJO ACADÉMICO Aprobación: 2016/04/06

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación

Se utilizo el servicio de Google Cloud para cargar nuestra aplicación, se utiliza una cuenta de Google personal,
pero hacer uso de esto se tiene que ingresar una forma de pago.

Entramos dentro del menú y localizamos Compute Engine y nos situamos dentro de Instancias de Vm para
crear una máquina virtual que permitirá realizar la carga del proyecto.

Localizamos el botón que nos permite crear la instancia.

Resolución CS N° 076-04-2016-04-20
VICERRECTORADO DOCENTE Código: GUIA-PRL-001

CONSEJO ACADÉMICO Aprobación: 2016/04/06

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación

Dentro de esto rellenamos el formulario con las características de hardware que deseamos que contenga
nuestra máquina virtual.

Verificar que la maquina virtual haya sido creada.

Luego ejecutamos la maquina virtual, en primero lugar actualizamos los paquetes con:

-sudo apt get update

Luego instalamos el paquete de Python con :

-sudo apt get install python3

Luego instalamos pip3 para instalar paquetes de Python:

-sudo apt get install pip3

Luego instalamos las librerias de Python que utilizamos en nuestro proyecto alojado en un servidor local. Estos
se especifican en la parte 2

Luego clonamos el archivo de github con el siguiente comando:

- git clone https://github.com/pabloAMD/proyecto_ml.git

Resolución CS N° 076-04-2016-04-20
VICERRECTORADO DOCENTE Código: GUIA-PRL-001

CONSEJO ACADÉMICO Aprobación: 2016/04/06

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación

Luego damos permisos para realizar la edición de los archivos con:

-chmod 777 proyecto_ml

Luego entramos al directorio y localizamos el archivo settings.py para agregar nuestra dirección ip de nuestra
máquina virtual dentro del vector ALLOWED_HOSTS

Una vez realizado esto inicializamos Django con el comando:

-python3 manage.py runserver 0.0.0.0:8000

CONCLUSIONES:

Al construir un modelo basado en una red neuronal convolucional, se demostró la posibilidad de aplicar un proceso
de filtrado a una imagen ingresada desde un ordenador para posteriormente aplicar un tratamiento a la imagen
para ajustarle a una estructura que sea factible para la manipulación por parte del modelo y pesos de nuestra red
neuronal, para ello la imagen es reducida a un tamaño de 35 x 35 con 3 canales, la cual es una tamaño estándar
para nuestro modelo, y posteriormente aplicar una normalización y filtración a la imagen, este proceso ajustara la
imagen a una estructura que podrá ser manipulada por nuestra red neuronal convolucional.

Posteriormente vemos un proceso de predicción, el cual consta del reconocimiento de patrones de la imagen
asociada a los pesos de un tratamiento de imágenes anteriormente analizado, es así como la red neuronal
convolucional clasifica en base a sus características y muestra como resultado la característica que tiene un mayor
porcentaje de similitud, como el caso de nuestro proyecto el resultado sería el nombre de una fruta.

Podemos agregar que, ya una vez creada la parte interna y funcional de nuestra red convolucional, se procedió a
crear una interfaz para la manipulación por parte del usuario, para esto se diseño 2 interfaces que tienen como
finalidad recibir una imagen por parte del usuario, y posteriormente mostrar su resultado en una página diferente,
para que esta pueda ser utilizada por la sociedad con un fin educacional y personalmente con un fin de realización
personal, el proyecto fue cargado a la plataforma Google Cloud el cual ofrece acceso al servicio desde cualquier
lugar.

Nombre de estudiantes: Pablo Adrian Malla Duchitanga, Christian Geovanny Rivera Loja

Firma de estudiantes:

Resolución CS N° 076-04-2016-04-20

También podría gustarte