0% encontró este documento útil (0 votos)
23 vistas9 páginas

Red Neuronal de Clasificación en Python

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
23 vistas9 páginas

Red Neuronal de Clasificación en Python

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD AUTONOMA DE SINALOA

UNIDAD REGIONAL NORTE


FACULTAD DE INGENIERÍA MOCHIS
LIC. INGENIERIA DE SOFTWARE

Proyecto final

Red Neuronal de Clasificación en Python

Materia: Redes neuronales y Lógica difusa


Docente: Yobani Martínez Ramírez
Alumno(a): Soto Angeles Paulette Esmeralda
Grupo: 4-02
• Importamos las librerias necesarias para el programa.

import tensorflow as tf
import tensorflow_datasets as tfds
import matplotlib.pyplot as plt
import math
import zipfile
import io
from PIL import Image
import cv2
import numpy as np
import os
#descomprimir nuestro archivo zip
data = zipfile.ZipFile('data.zip','r')
data.extractall()
• Para conocer la ubicación de las imágenes declaramos variables con las rutas
de cada una, así como el tamaño de las imágenes.

path_elefantes='data/elefantes'
elefantes_training=[]
path_jirafas='data/jirafas'
jirafas_training=[]
path_pruebas='data/prueba'
prueba=[]
img_size=300;
• Se utiliza el ciclo para redimensionar las imagenes y puedan ser leídas por la
red, este se usa con todas las imágenes.

for img in os.listdir(path_elefantes):


img = cv2.imread(os.path.join(path_elefantes,img))
img_gray_size = cv2.resize(img,(img_size,img_size))
elefantes_training.append(img_gray_size)
• Hacemos una primera prueba con las imágenes de elefantes.

#tamaño del cuadrdado


elefantes_training = np.array(elefantes_training)
plt.figure()
plt.imshow(np.squeeze(elefantes_training[1]))
plt.colorbar()
plt.grid(False)
plt.show()
• Se repite el proceso anterior con las jirafas.

for img in os.listdir(path_jirafas):


img = cv2.imread(os.path.join(path_jirafas,img))
img_gray_size = cv2.resize(img,(img_size,img_size))
jirafas_training.append(img_gray_size)

plt.figure()
plt.imshow(np.squeeze(jirafas_training[4]))
plt.colorbar()
plt.grid(False)
plt.show()
jirafas_training= np.array(jirafas_training)
print(jirafas_training.shape)
datos_training= np.concatenate([elefantes_training,jirafas_training])
print(len(datos_training))
datos= np.array(datos_training)

• Aquí se realizó el mismo proceso que se hizo con las imágenes de elefantes y
jirafas pero ahora con las imágenes de pruebas, aquí se hizo una modificación
para limpiar las imágenes de prueba que no podían ser procesadas.

for img_name in os.listdir(path_pruebas):


img_path = os.path.join(path_pruebas, img_name)
img = cv2.imread(img_path)

if img is not None:


img_gray_size = cv2.resize(img, (img_size, img_size))
prueba.append(img_gray_size)
else:
print(f"Error: Imagen {img_name} no puede ser leida.")
• Aquí generamos las etiquetas de acuerdo a la cantidad de imágenes que
tenemos de cada tipo.

elefante_et=np.repeat(0,len(elefantes_training))
print(elefante_et)

jirafa_et=np.repeat(1,len(jirafas_training))
print(len(jirafa_et))
print(jirafa_et)

• Concatenamos las listas, en la cual los 0 son elefantes y los 1 jirafas.

tipo=['Elefante','Jirafa']
etiquetas= np.concatenate([elefante_et,jirafa_et])
print(len(etiquetas))
print(etiquetas)
etiqueta = np.array(etiquetas)
print(etiquetas.shape)

• Hacemos pruebas para ver si las etiquetas corresponden a la imagen que


debe ser.

plt.figure(figsize=(50,50))
for i in range(100):
plt.subplot(10,10,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(datos[i])
plt.xlabel(tipo[etiquetas[i]])
plt.show()

• Definimos la red neuronal convolucional con dos salidas, tiene 100 neuronas y
tiene un dropout del 0.5, lo que quitara las neuronas que aportan menos al
funcionamiento.

modelo = tf.keras.Sequential([
tf.keras.layers.Conv2D(32,(3,3),input_shape=(300,300,3),activation
=tf.nn.relu),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(64,(3,3),input_shape=(300,300,3),activation
=tf.nn.relu),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Dropout(0.5), #quita el 50% de neuronas
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(units=100,activation=tf.nn.relu),
tf.keras.layers.Dense(2,activation=tf.nn.softmax)#2 salidas
])
Definimos el optimizador Adam.

#Optimizador
modelo.compile(
optimizer="Adam",
loss=tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=["accuracy"]
)
• Aquí realizamos el entrenamiento, las épocas se pueden modificar o dejar de
esta manera, tomando en cuenta que entre más neuronas, mayor es el tiempo
de entrenamiento.

#Entrenamiento
entrenamiento = modelo.fit(
datos,etiquetas,epochs=10
)

• Se realizaron pruebas con las imágenes almacenadas para pruebas


cambiando la posición de la lista.

imagen= prueba[45]
plt.figure()
plt.imshow(imagen)
plt.colorbar()
plt.show()

imagen = np.array([imagen])
img_prediccion = modelo.predict(imagen)

print("Prediccion: "+tipo[np.argmax(img_prediccion)])
• Se realizaron pruebas con imágenes descargadas de internet.

imagen= 'pruebajira5.jpg'
img = cv2.imread(imagen)
img_gray_size = cv2.resize(img,(img_size,img_size))
imagen = img_gray_size
imagen=np.array(imagen).astype(float)/255
plt.figure()
plt.imshow(imagen)
plt.colorbar()
plt.show()
imagen = np.array([imagen])
img_prediccion = modelo.predict(imagen)

print("Prediccion: " + tipo[np.argmax(img_prediccion)])


Carpeta de imagenes en drive:
https://drive.google.com/drive/folders/13ZtyEuUOiAn8gUlKctQgUDEyOeSaI7fr?usp=sharing

También podría gustarte