Transferencia de aprendizaje
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.applications import VGG16
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import Adam
# 1. Cargar el modelo preentrenado VGG16 sin la capa final
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
# 2. Congelar las capas base para que no se entrenen
base_model.trainable = False
# 3. Crear el modelo con la capa base preentrenada y las capas personalizadas
model = models.Sequential([
base_model, # Usar la red preentrenada VGG16 sin la capa final
layers.Flatten(), # Aplanar la salida de las capas convolucionales
layers.Dense(512, activation='relu'), # Capa densa completamente conectada
layers.Dropout(0.5), # Regularización para evitar sobreajuste
layers.Dense(2, activation='softmax') # Capa de salida con 2 clases (puedes cambiar el número de clases)
])
# 4. Compilar el modelo
model.compile(optimizer=Adam(learning_rate=0.0001),
loss='sparse_categorical_crossentropy', # Para clasificación de 2 clases (modificar según el caso)
metrics=['accuracy'])
# 5. Preprocesar las imágenes (puedes usar tus propias imágenes y directorios)
train_datagen = ImageDataGenerator(
rescale=1./255, # Normalizar imágenes
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True
)
validation_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
'dataset',
target_size=(224, 224),
batch_size=32,
class_mode='sparse' # Cambiar según el tipo de etiqueta (sparse o categorical)
)
# 6. Entrenar el modelo
history = model.fit(
train_generator,
steps_per_epoch=train_generator.samples // train_generator.batch_size,
epochs=10, # Puedes ajustar el número de épocas
)
import matplotlib.pyplot as plt
# Evaluar el modelo
plt.plot(history.history['accuracy'])
plt.title('Precisión del modelo')
plt.xlabel('Épocas')
plt.ylabel('Precisión')
plt.show()
# Guardar el modelo entrenado
model.save('modelo_gato_perro_t.h5')
Comprobar:
from tensorflow.keras.preprocessing import image
import numpy as np
from tensorflow.keras.models import load_model
error=0
model = load_model('modelo_gato_perro_t.h5')
for i in range(100):
# Cargar la imagen
img_path = f'dataset/Dog/{i*10}.jpg' # Cambia la ruta de la imagen
img = image.load_img(img_path, target_size=(224, 224)) # Redimensionar a 64x64
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0) # Hacer batch
# Normalizar la imagen
img_array /= 255.
# Realizar la predicción
prediction = model.predict(img_array)
# print(prediction)
# Mostrar el resultado
if prediction[0][1] > 0.5:
print("Es un perro.")
else:
print(f"Es un gato {i}.")
error=error+1
print(error)
https://trifulcas.com/wp-content/uploads/2024/11/modelo_gato_perro_t.h5