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
