Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PRÁCTICA DE LABORATORIO
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
Código utilizado:
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.
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
retorno = modeloCNN.predecir(file)
return render(request, "Resultado.html", {"direc":file,"fruta":
retorno.get('pred'), "porcentaje": retorno.get('porcentaje')})
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.img_to_array(imagen)
imagen /= 255
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
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
k.reset_uids()
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.
Resolución CS N° 076-04-2016-04-20
VICERRECTORADO DOCENTE Código: GUIA-PRL-001
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.
Resolución CS N° 076-04-2016-04-20
VICERRECTORADO DOCENTE Código: GUIA-PRL-001
Dentro de esto rellenamos el formulario con las características de hardware que deseamos que contenga
nuestra máquina virtual.
Luego ejecutamos la maquina virtual, en primero lugar actualizamos los paquetes con:
Luego instalamos las librerias de Python que utilizamos en nuestro proyecto alojado en un servidor local. Estos
se especifican en la parte 2
Resolución CS N° 076-04-2016-04-20
VICERRECTORADO DOCENTE Código: GUIA-PRL-001
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
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