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