# Modelo CNN para Clasificación de Perros vs Gatos Este modelo de red neuronal convolucional (CNN) ha sido entrenado para clasificar imágenes de perros y gatos. Se trata de una tarea de clasificación binaria donde la salida es `0` (gato) o `1` (perro). Fue construido utilizando `TensorFlow` y `Keras`, entrenado desde cero con un dataset personalizado. --- ## Dataset - **Nombre**: Cats vs Dogs Dataset - **Origen**: Carpeta local `train/` - **Cantidad**: 25,000 imágenes - Etiquetado automático por nombre de archivo (`cat` o `dog`) - **Tamaño de imagen**: 150x150 píxeles - **Preprocesamiento**: - Reescalado: todos los valores de píxel normalizados a `[0, 1]` - División en entrenamiento y validación: `80% / 20%` --- ## Arquitectura del modelo Sequential([ Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)), MaxPooling2D(2, 2), Conv2D(64, (3, 3), activation='relu'), MaxPooling2D(2, 2), Conv2D(128, (3, 3), activation='relu'), MaxPooling2D(2, 2), Flatten(), Dense(512, activation='relu'), Dropout(0.5), Dense(1, activation='sigmoid') ]) model.compile(optimizer=Adam(), loss='binary_crossentropy', metrics=['accuracy']) model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val)) --- ## Como usar from tensorflow.keras.models import load_model from tensorflow.keras.preprocessing import image import numpy as np model = load_model("dogs_vs_cats_cnn.h5") def predict_image(img_path): img = image.load_img(img_path, target_size=(150, 150)) img_array = image.img_to_array(img) / 255.0 img_array = np.expand_dims(img_array, axis=0) prediction = model.predict(img_array)[0][0] return "Perro 🐶" if prediction > 0.5 else "Gato 🐱" --- ## Guardado del modelo model.save("dogs_vs_cats_cnn.h5") --- ## Requisitos - Python >= 3.8 - TensorFlow >= 2.9 - NumPy - scikit-learn ---