Ejemplo red de clasificación
import tensorflow as tf
import tensorflow_datasets as tfds
datos, metadatos = tfds.load("horses_or_humans", as_supervised=True, with_info=True)
tfds.show_examples(datos["train"], metadatos)
import matplotlib.pyplot as plt
import cv2 # opencv - trabajar y hacer transformaciones en imagenes
plt.figure(figsize=(20, 20))
TAMANO_IMG = 100
for i, (imagen, etiqueta) in enumerate(datos["train"].take(25)):
imagen = cv2.resize(imagen.numpy(), (TAMANO_IMG, TAMANO_IMG))
imagen = cv2.cvtColor(imagen, cv2.COLOR_BGR2GRAY)
plt.subplot(5, 5, i + 1)
plt.imshow(imagen, cmap="gray")
plt.show()
datos_entrenamiento = []
for i, (imagen, etiqueta) in enumerate(datos["train"]):
imagen = cv2.resize(imagen.numpy(), (TAMANO_IMG, TAMANO_IMG))
imagen = cv2.cvtColor(imagen, cv2.COLOR_BGR2GRAY)
imagen = imagen.reshape(TAMANO_IMG, TAMANO_IMG, 1)
datos_entrenamiento.append([imagen, etiqueta])
datos_pruebas = []
for i, (imagen, etiqueta) in enumerate(datos["test"]):
imagen = cv2.resize(imagen.numpy(), (TAMANO_IMG, TAMANO_IMG))
imagen = cv2.cvtColor(imagen, cv2.COLOR_BGR2GRAY)
imagen = imagen.reshape(TAMANO_IMG, TAMANO_IMG, 1)
datos_pruebas.append([imagen, etiqueta])
X = []
y = []
for imagen, etiqueta in datos_entrenamiento:
X.append(imagen)
y.append(etiqueta)
# Normalizar las imagenes
import numpy as np
X = np.array(X).astype(float) / 255
y = np.array(y)
modelo = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), activation="relu", input_shape=(100, 100, 1)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(64, (3, 3), activation="relu"),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(128, (3, 3), activation="relu"),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(100, activation="relu"),
tf.keras.layers.Dense(1, activation="sigmoid")
])
modelo.compile(
optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"]
)
modelo.fit(
X, y, batch_size=32, validation_split=0.15, epochs=50
)
X_test = []
y_test = []
for imagen, etiqueta in datos_pruebas:
X_test.append(imagen)
y_test.append(etiqueta)
# Convertir a numpy arrays y normalizar
X_test = np.array(X_test).astype(float) / 255
y_test = np.array(y_test)
loss, accuracy = modelo.evaluate(X_test, y_test)
print(f"Loss: {loss}, Accuracy: {accuracy}")
import matplotlib.pyplot as plt
# Seleccionar un subconjunto de imágenes de prueba
num_samples = 5
sample_indices = np.random.choice(len(X_test), num_samples, replace=False)
sample_images = X_test[sample_indices]
sample_labels = y_test[sample_indices]
# Hacer predicciones
predictions = modelo.predict(sample_images)
# Visualizar resultados
for i in range(num_samples):
plt.imshow(sample_images[i].reshape(100, 100), cmap="gray")
plt.title(
f"Real: {'Horse' if sample_labels[i] == 0 else 'Human'}, Predicción: {'Horse' if predictions[i] < 0.5 else 'Human'}")
plt.axis("off")
plt.show()
from tensorflow.keras.preprocessing import image
import cv2
import numpy as np
def cargar_y_preprocesar_imagen(ruta):
# Cargar la imagen, redimensionar a 100x100, convertir a escala de grises y normalizar
img = image.load_img(ruta, target_size=(100, 100), color_mode="grayscale")
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0) # Añadir una dimensión para el lote
img_array = img_array / 255.0 # Normalizar al rango [0,1]
return img_array
imagenes=["humano.jpg","caballo.jpg"]
for imagen in imagenes:
# Ruta de la imagen que quieres probar
ruta_imagen = "humano.jpg"
imagen_propia = cargar_y_preprocesar_imagen(ruta_imagen)
# Hacer la predicción en la imagen propia
prediccion = modelo.predict(imagen_propia)
plt.imshow(imagen_propia.reshape(100, 100), cmap="gray")
plt.title(
f"Real: Predicción: {'Horse' if prediccion < 0.5 else 'Human'}")
plt.axis("off")
plt.show()
Imágenes

