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