0% encontró este documento útil (0 votos)
18 vistas15 páginas

Final

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
18 vistas15 páginas

Final

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

import tensorflow as tf

from [Link] import Sequential, Model


from [Link] import ImageDataGenerator
from [Link] import BatchNormalization, Conv2D, MaxPooling2D,
Dense, Flatten, Activation, Dropout, GlobalAveragePooling2D
from [Link] import normalize, to_categorical
from [Link] import VGG16
from [Link] import RMSprop
from [Link] import backend as K
from [Link] import EarlyStopping, ModelCheckpoint
import numpy as np
import [Link] as plt
from [Link] import image
import os
import random
from PIL import ImageFile
from scipy import ndimage
import cv2
ImageFile.LOAD_TRUNCATED_IMAGES = True

# Tamaño de la imagen
img_width, img_height = 224, 224 # Cambiado a 224x224 para ser compatible con
VGG16

# Montar Google Drive


from [Link] import drive
[Link]("/content/drive", force_remount=True)

train_data_dir = r'/content/drive/MyDrive/Colab Notebooks/dataset-NARAJANAS/train'


validation_data_dir = r'/content/drive/MyDrive/Colab
Notebooks/dataset-NARAJANAS/test'
nb_train_samples = 1490
nb_validation_samples = 608
batch_size = 30
epochs = 20 # Aumentado para permitir más entrenamiento

# Código para definir el input_shape


if K.image_data_format() == "channels_first":
input_shape = (3, img_width, img_height)
else:
input_shape = (img_width, img_height, 3)

# Función para aplicar el filtro de la mediana


def apply_median_filter(img_array, size=3):
"""
Aplica un filtro de la mediana a la imagen.

:param img_array: Array de la imagen (height, width, channels)


:param size: Tamaño de la ventana del filtro (debe ser impar)
:return: Imagen con el filtro aplicado
"""
return ndimage.median_filter(img_array, size=(size, size, 1))

# Clase personalizada de ImageDataGenerator con filtro de la mediana


class MedianFilterImageDataGenerator(ImageDataGenerator):
def flow_from_directory(self, *args, **kwargs):
generator = super().flow_from_directory(*args, **kwargs)
while True:
x, y = next(generator)
x = [Link]([apply_median_filter(img) for img in x])
yield x, y

# Preprocesamiento de imágenes
train_datagen = MedianFilterImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical') # Cambiado a 'categorical' para softmax

validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical') # Cambiado a 'categorical' para softmax

# Visualización del preprocesamiento


def plot_images(generator, num_images=9):
# Obtener imágenes originales
original_generator = ImageDataGenerator(rescale=1./255).flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=num_images,
class_mode='categorical',
shuffle=True
)
original_batch, labels = next(original_generator)

# Obtener imágenes procesadas


processed_batch, _ = next(generator)

# Crear la figura
fig, axes = [Link](num_images, 2, figsize=(10, 4*num_images))

for i in range(num_images):
# Mostrar imagen original
axes[i, 0].imshow(original_batch[i])
axes[i, 0].axis('off')
axes[i, 0].set_title('Original')

# Mostrar imagen procesada


axes[i, 1].imshow(processed_batch[i])
axes[i, 1].axis('off')
axes[i, 1].set_title('Procesada')

plt.tight_layout()
[Link]()

print("Imágenes del conjunto de entrenamiento antes y después del preprocesamiento


completo:")
plot_images(train_generator)
import numpy as np
import random
from PIL import Image, ImageEnhance, ImageFilter
import [Link] as plt

# Función para calcular la luminosidad de una imagen


def calcular_luminosidad(image):
grayscale_image = [Link]('L') # Convertir a escala de grises
histogram = grayscale_image.histogram()
pixels = sum(histogram)
luminosidad = sum(i * histogram[i] for i in range(256)) / pixels
return luminosidad

# Función para calcular la nitidez de una imagen


def calcular_nitidez(image):
edge_image = [Link](ImageFilter.FIND_EDGES) # Aplicar un filtro de
detección de bordes
histogram = edge_image.histogram()
nitidez = sum(histogram)
return nitidez

# Función para desnormalizar imágenes (valores de 0-1 a 0-255)


def desnormalizar_imagen(image_array):
return (image_array * 255).astype('uint8')

# Seleccionar aleatoriamente 5 imágenes del generador de datos procesados


def analizar_imagenes_procesadas(generator, num_images=5):
# Obtener imágenes procesadas
processed_batch, _ = next(generator)

indices = [Link](range(processed_batch.shape[0]), num_images) #


Seleccionar aleatoriamente 5 imágenes
fig, axes = [Link](num_images, 1, figsize=(10, 4*num_images))

for i, idx in enumerate(indices):


img_array = processed_batch[idx]

# Desnormalizar la imagen
img_array = desnormalizar_imagen(img_array)

# Convertir el array a imagen


img = [Link](img_array)

# Mostrar imagen
axes[i].imshow(img)
axes[i].axis('off')
axes[i].set_title(f'Imagen {i+1}')

# Calcular tamaño
size = [Link]

# Calcular luminosidad
luminosidad = calcular_luminosidad(img)

# Calcular nitidez
nitidez = calcular_nitidez(img)

print(f"Imagen {i+1}:")
print(f"Tamaño: {size}")
print(f"Luminosidad: {luminosidad:.2f}")
print(f"Nitidez: {nitidez:.2f}")
print("------------")

plt.tight_layout()
[Link]()

# Llamar a la función para analizar 5 imágenes procesadas


analizar_imagenes_procesadas(train_generator)

import numpy as np
import random
from PIL import Image, ImageEnhance, ImageFilter
import [Link] as plt
from [Link] import ImageDataGenerator

# Función para calcular la luminosidad de una imagen


def calcular_luminosidad(image):
grayscale_image = [Link]('L') # Convertir a escala de grises
histogram = grayscale_image.histogram()
pixels = sum(histogram)
luminosidad = sum(i * histogram[i] for i in range(256)) / pixels
return luminosidad

# Función para calcular la nitidez de una imagen


def calcular_nitidez(image):
edge_image = [Link](ImageFilter.FIND_EDGES) # Aplicar un filtro de
detección de bordes
histogram = edge_image.histogram()
nitidez = sum(histogram)
return nitidez

# Función para desnormalizar imágenes (valores de 0-1 a 0-255)


def desnormalizar_imagen(image_array):
return (image_array * 255).astype('uint8')

# Función para redimensionar imágenes a 224x224


def redimensionar_imagen(image, tamaño=(224, 224)):
return [Link](tamaño, [Link])

# Función para procesar imágenes (puedes aplicar aquí cualquier procesamiento


necesario)
def procesar_imagen(image):
# Ejemplo de procesamiento: mejorar el contraste
enhancer = [Link](image)
processed_image = [Link](1.5) # Aumentar el contraste
return processed_image

# Función para comparar las imágenes originales y procesadas


def comparar_imagenes(original_generator, num_images=5):
# Obtener las imágenes originales
original_batch, _ = next(original_generator)

# Asegurarse de que el número de imágenes no exceda el tamaño del lote


num_images = min(num_images, original_batch.shape[0])

# Seleccionar aleatoriamente 'num_images' imágenes


indices = [Link](range(num_images), num_images)
fig, axes = [Link](num_images, 2, figsize=(12, 4*num_images))

for i, idx in enumerate(indices):


# Imagen original
original_img_array = original_batch[idx]
original_img = [Link](desnormalizar_imagen(original_img_array))
original_img = redimensionar_imagen(original_img) # Redimensionar imagen
original a 224x224

# Imagen procesada
processed_img = procesar_imagen(original_img) # Procesar la imagen
original

# Comparar luminosidad
original_luminosidad = calcular_luminosidad(original_img)
processed_luminosidad = calcular_luminosidad(processed_img)

# Comparar nitidez
original_nitidez = calcular_nitidez(original_img)
processed_nitidez = calcular_nitidez(processed_img)

# Mostrar imágenes lado a lado


axes[i, 0].imshow(original_img)
axes[i, 0].axis('off')
axes[i, 0].set_title(f'Original - {i+1}')

axes[i, 1].imshow(processed_img)
axes[i, 1].axis('off')
axes[i, 1].set_title(f'Procesada - {i+1}')

# Imprimir las comparaciones


print(f"Comparación de la imagen {i+1}:")
print(f"Luminosidad Original: {original_luminosidad:.2f}, Luminosidad
Procesada: {processed_luminosidad:.2f}")
print(f"Nitidez Original: {original_nitidez:.2f}, Nitidez Procesada:
{processed_nitidez:.2f}")
print("------------")

plt.tight_layout()
[Link]()

# Definir la ruta a tus imágenes originales


train_data_dir = '/content/drive/MyDrive/Colab Notebooks/dataset-NARAJANAS/train'
# Actualiza esta ruta

# Generar un generador para las imágenes originales (sin procesamiento)


original_generator = ImageDataGenerator(rescale=1./255).flow_from_directory(
train_data_dir,
target_size=(224, 224), # Redimensionar a 224x224
batch_size=5,
class_mode='categorical',
shuffle=True
)

# Llamar a la función para comparar imágenes originales y procesadas


comparar_imagenes(original_generator)
import numpy as np
import random
from PIL import Image, ImageEnhance, ImageFilter
import [Link] as plt
from [Link] import ImageDataGenerator

# Función para calcular la luminosidad de una imagen


def calcular_luminosidad(image):
grayscale_image = [Link]('L') # Convertir a escala de grises
histogram = grayscale_image.histogram()
pixels = sum(histogram)
luminosidad = sum(i * histogram[i] for i in range(256)) / pixels
return luminosidad

# Función para calcular la nitidez de una imagen


def calcular_nitidez(image):
edge_image = [Link](ImageFilter.FIND_EDGES) # Aplicar un filtro de
detección de bordes
histogram = edge_image.histogram()
nitidez = sum(histogram)
return nitidez

# Función para desnormalizar imágenes (valores de 0-1 a 0-255)


def desnormalizar_imagen(image_array):
return (image_array * 255).astype('uint8')

# Función para redimensionar imágenes a 224x224


def redimensionar_imagen(image, tamaño=(224, 224)):
return [Link](tamaño, [Link])

# Función para procesar imágenes (puedes aplicar aquí cualquier procesamiento


necesario)
def procesar_imagen(image):
# Ejemplo de procesamiento: mejorar el contraste
enhancer = [Link](image)
processed_image = [Link](1.5) # Aumentar el contraste
return processed_image

# Función para comparar las imágenes originales y procesadas


def comparar_imagenes(original_generator, num_images=5):
# Obtener las imágenes originales
original_batch, _ = next(original_generator)

# Asegurarse de que el número de imágenes no exceda el tamaño del lote


num_images = min(num_images, original_batch.shape[0])

# Seleccionar aleatoriamente 'num_images' imágenes


indices = [Link](range(num_images), num_images)
fig, axes = [Link](num_images, 3, figsize=(18, 4*num_images)) # Añadir
columna para tamaños

for i, idx in enumerate(indices):


# Imagen original
original_img_array = original_batch[idx]
original_img = [Link](desnormalizar_imagen(original_img_array))
original_img_resized = redimensionar_imagen(original_img) # Redimensionar
imagen original a 224x224

# Imagen procesada
processed_img = procesar_imagen(original_img_resized) # Procesar la imagen
original redimensionada

# Obtener tamaños
original_size = original_img_resized.size
processed_size = processed_img.size

# Comparar luminosidad
original_luminosidad = calcular_luminosidad(original_img_resized)
processed_luminosidad = calcular_luminosidad(processed_img)

# Comparar nitidez
original_nitidez = calcular_nitidez(original_img_resized)
processed_nitidez = calcular_nitidez(processed_img)

# Mostrar imágenes lado a lado


axes[i, 0].imshow(original_img_resized)
axes[i, 0].axis('off')
axes[i, 0].set_title(f'Original - {i+1}')

axes[i, 1].imshow(processed_img)
axes[i, 1].axis('off')
axes[i, 1].set_title(f'Procesada - {i+1}')

# Mostrar tamaños
axes[i, 2].text(0.5, 0.5, f'Tamaño Original: {original_size}\nTamaño
Procesada: {processed_size}',
horizontalalignment='center', verticalalignment='center',
fontsize=12)
axes[i, 2].axis('off')

# Imprimir las comparaciones


print(f"Comparación de la imagen {i+1}:")
print(f"Tamaño Original: {original_size}, Tamaño Procesada:
{processed_size}")
print(f"Luminosidad Original: {original_luminosidad:.2f}, Luminosidad
Procesada: {processed_luminosidad:.2f}")
print(f"Nitidez Original: {original_nitidez:.2f}, Nitidez Procesada:
{processed_nitidez:.2f}")
print("------------")

plt.tight_layout()
[Link]()

# Definir la ruta a tus imágenes originales


train_data_dir = '/content/drive/MyDrive/Colab Notebooks/dataset-NARAJANAS/train'
# Actualiza esta ruta

# Generar un generador para las imágenes originales (sin procesamiento)


original_generator = ImageDataGenerator(rescale=1./255).flow_from_directory(
train_data_dir,
target_size=(224, 224), # Redimensionar a 224x224
batch_size=5,
class_mode='categorical',
shuffle=True
)

# Llamar a la función para comparar imágenes originales y procesadas


comparar_imagenes(original_generator)
import [Link] as plt
import numpy as np

# Datos
imagenes = ['Imagen 1', 'Imagen 2', 'Imagen 3', 'Imagen 4', 'Imagen 5']
luminosidad_original = [121.68, 207.66, 138.03, 114.97, 33.31]
luminosidad_procesada = [123.19, 199.18, 135.82, 116.88, 35.08]
nitidez_original = [150528.00, 150528.00, 150528.00, 150528.00, 150528.00]
nitidez_procesada = [150528.00, 150528.00, 150528.00, 150528.00, 150528.00]

x = [Link](len(imagenes)) # La ubicación de las barras

# Crear subgráficas
fig, ax = [Link](2, 1, figsize=(10, 10), sharex=True)

# Graficar luminosidad
ax[0].bar(x - 0.2, luminosidad_original, 0.4, label='Luminosidad Original',
color='blue')
ax[0].bar(x + 0.2, luminosidad_procesada, 0.4, label='Luminosidad Procesada',
color='orange')
ax[0].set_ylabel('Luminosidad')
ax[0].set_title('Comparación de Luminosidad')
ax[0].set_xticks(x)
ax[0].set_xticklabels(imagenes)
ax[0].legend()

# Graficar nitidez
ax[1].bar(x - 0.2, nitidez_original, 0.4, label='Nitidez Original', color='blue')
ax[1].bar(x + 0.2, nitidez_procesada, 0.4, label='Nitidez Procesada',
color='orange')
ax[1].set_ylabel('Nitidez')
ax[1].set_title('Comparación de Nitidez')
ax[1].set_xticks(x)
ax[1].set_xticklabels(imagenes)
ax[1].legend()

# Ajustar diseño
plt.tight_layout()
[Link]()

# Cargar el modelo VGG16 preentrenado y eliminar las capas superiores


base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224,
3))

# Congelar las capas convolucionales del modelo base


for layer in base_model.layers:
[Link] = False

# Descongtimas capas del modelo base


#for layer in base_model.layers[-4:]: # Descoelar las úlngela las últimas 4 capas,
por ejemplo
# [Link] = True

# Crear un modelo secuencial


model = Sequential([
base_model,
GlobalAveragePooling2D(),
Dense(64, activation='relu'),
Dense(2, activation='softmax') # Cambiado a 2 neuronas para softmax
])

# Compilar el modelo
[Link](optimizer='adam', loss='categorical_crossentropy',
metrics=['accuracy'])

model_path='best_model.keras'

# Configurar EarlyStopping y ModelCheckpoint


early_stopping = EarlyStopping(monitor='val_loss', patience=10,
restore_best_weights=True)

model_checkpoint = ModelCheckpoint(model_path, monitor='val_loss',


save_best_only=True)

# Guardar el mejor modelo

model_dir = r"/content/drive/MyDrive/Colab Notebooks/dataset-NARAJANAS"


model_filename = "naranjas_vgg16_softmax.keras" # Changed file extension to .keras
json_filename = "naranjas_vgg16_softmax.json"
model_path = [Link](model_dir, model_filename)
json_path = [Link](model_dir, json_filename)

model_checkpoint = ModelCheckpoint(model_path, monitor='val_loss',


save_best_only=True)

# Entrenar el modelo
history = [Link](
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs,
validation_data=validation_generator,
validation_steps=nb_validation_samples // batch_size,
callbacks=[early_stopping, model_checkpoint]
)

# Guardar el modelo en formato Keras y JSON


[Link](model_path)
model_json = model.to_json()
with open(json_path, "w") as json_file:
json_file.write(model_json)
# Guardar el modelo en formato HDF5
[Link]('/content/drive/MyDrive/Colab
Notebooks/dataset-NARAJANAS/naranjas_vgg16_softmax.h5')

import [Link] as plt

# Graficar la pérdida y precisión para las últimas épocas


[Link](figsize=(12, 6))

# Graficar la pérdida
[Link](1, 2, 1)
[Link]([Link]['loss'], label='Pérdida en Entrenamiento')
[Link]([Link]['val_loss'], label='Pérdida en Validación')
[Link]('Épocas')
[Link]('Pérdida')
[Link]()
[Link]('Pérdida durante el Entrenamiento')

# Graficar la precisión
[Link](1, 2, 2)
[Link]([Link]['accuracy'], label='Precisión en Entrenamiento')
[Link]([Link]['val_accuracy'], label='Precisión en Validación')
[Link]('Épocas')
[Link]('Precisión')
[Link]()
[Link]('Precisión durante el Entrenamiento')

[Link]()

# Ajustar Early Stopping si es necesario


from [Link] import EarlyStopping

early_stopping = EarlyStopping(monitor='val_loss', patience=10,


restore_best_weights=True)

# Evaluar el rendimiento en el conjunto de validación


val_loss, val_accuracy = [Link](validation_generator)
print(f"Validation Accuracy: {val_accuracy:.2f}")
print(f"Validation Loss: {val_loss:.2f}")

# Prueba con 10 imágenes nuevas y mostrar resultados


test_images_dir = r'/content/drive/MyDrive/Colab Notebooks/dataset-NARAJANAS/test'
plaga_images = [[Link](test_images_dir, 'plaga', img) for img in
[Link](test_images_dir + '/plaga')]
no_plaga_images = [[Link](test_images_dir, 'no_plaga', img) for img in
[Link](test_images_dir + '/no_plaga')]

# Combinar y seleccionar aleatoriamente 5 imágenes de cada clase


selected_images = [Link](plaga_images, 5) + [Link](no_plaga_images,
5)
[Link](selected_images)

[Link](figsize=(20, 10))
for i, img_path in enumerate(selected_images):
img_pred = image.load_img(img_path, target_size=(img_width, img_height))
img_pred = image.img_to_array(img_pred)
img_pred = np.expand_dims(img_pred, axis=0)
img_pred = img_pred / 255.0 # Normalizar

# Realizar la predicción
prediction = [Link](img_pred)
predicted_class = [Link](prediction, axis=1) # Obtener la clase con mayor
probabilidad

# Mostrar la imagen con su predicción


[Link](2, 5, i + 1)
img = [Link](img_path)
[Link](img)
[Link]('off')
actual_class = "Plaga" if 'plaga' in img_path else "No Plaga"
[Link](f"{actual_class}: {'Plaga' if predicted_class == 1 else 'No Plaga'}\
nProbabilidad: {prediction[0][predicted_class][0]:.2f}")

[Link]()

import [Link] as plt

# Suponiendo que `history` es el objeto devuelto por el método `fit` de Keras


# [Link]['loss'] y [Link]['val_loss'] son listas de pérdidas de
entrenamiento y validación
# [Link]['accuracy'] y [Link]['val_accuracy'] son listas de
precisión de entrenamiento y validación

epochs = range(1, len([Link]['loss']) + 1)

[Link](figsize=(14, 5))

# Gráfico de pérdida
[Link](1, 2, 1)
[Link](epochs, [Link]['loss'], 'bo-', label='Pérdida de Entrenamiento')
[Link](epochs, [Link]['val_loss'], 'ro-', label='Pérdida de Validación')
[Link]('Curva de Aprendizaje - Pérdida')
[Link]('Épocas')
[Link]('Pérdida')
[Link]()
[Link](True)

# Gráfico de precisión
[Link](1, 2, 2)
[Link](epochs, [Link]['accuracy'], 'bo-', label='Precisión de
Entrenamiento')
[Link](epochs, [Link]['val_accuracy'], 'ro-', label='Precisión de
Validación')
[Link]('Curva de Aprendizaje - Precisión')
[Link]('Épocas')
[Link]('Precisión')
[Link]()
[Link](True)

plt.tight_layout()
[Link]()

import [Link] as plt

# Datos de pérdida y precisión del entrenamiento


epochs = range(1, len([Link]['loss']) + 1)

[Link](figsize=(14, 5))

# Pérdida
[Link](1, 2, 1)
[Link](epochs, [Link]['loss'], 'bo-', label='Pérdida de Entrenamiento')
[Link](epochs, [Link]['val_loss'], 'ro-', label='Pérdida de Validación')
[Link]('Pérdida Durante el Entrenamiento')
[Link]('Épocas')
[Link]('Pérdida')
[Link]()
[Link](True)
# Precisión
[Link](1, 2, 2)
[Link](epochs, [Link]['accuracy'], 'bo-', label='Precisión de
Entrenamiento')
[Link](epochs, [Link]['val_accuracy'], 'ro-', label='Precisión de
Validación')
[Link]('Precisión Durante el Entrenamiento')
[Link]('Épocas')
[Link]('Precisión')
[Link]()
[Link](True)

plt.tight_layout()
[Link]()

import [Link] as plt


import numpy as np

def plot_histogram(errors):
# Asegúrate de que `errors` sea un array de NumPy y no contenga NaN o infinitos
errors = [Link](errors)
errors = errors[[Link](errors)]

[Link](figsize=(10, 6))
[Link](errors, bins=30, edgecolor='k', alpha=0.7)
[Link]('Histograma de Errores')
[Link]('Error')
[Link]('Frecuencia')
[Link](True)
[Link]()

def plot_learning_curves(history):
epochs = range(1, len([Link]['loss']) + 1)

[Link](figsize=(14, 5))

# Gráfico de pérdida
[Link](1, 2, 1)
[Link](epochs, [Link]['loss'], 'bo-', label='Pérdida de
Entrenamiento')
[Link](epochs, [Link]['val_loss'], 'ro-', label='Pérdida de
Validación')
[Link]('Curva de Aprendizaje - Pérdida')
[Link]('Épocas')
[Link]('Pérdida')
[Link]()
[Link](True)

# Gráfico de precisión
[Link](1, 2, 2)
[Link](epochs, [Link]['accuracy'], 'bo-', label='Precisión de
Entrenamiento')
[Link](epochs, [Link]['val_accuracy'], 'ro-', label='Precisión de
Validación')
[Link]('Curva de Aprendizaje - Precisión')
[Link]('Épocas')
[Link]('Precisión')
[Link]()
[Link](True)

plt.tight_layout()
[Link]()

def plot_loss_and_accuracy(history):
epochs = range(1, len([Link]['loss']) + 1)

[Link](figsize=(14, 5))

# Pérdida
[Link](1, 2, 1)
[Link](epochs, [Link]['loss'], 'bo-', label='Pérdida de
Entrenamiento')
[Link](epochs, [Link]['val_loss'], 'ro-', label='Pérdida de
Validación')
[Link]('Pérdida Durante el Entrenamiento')
[Link]('Épocas')
[Link]('Pérdida')
[Link]()
[Link](True)

# Precisión
[Link](1, 2, 2)
[Link](epochs, [Link]['accuracy'], 'bo-', label='Precisión de
Entrenamiento')
[Link](epochs, [Link]['val_accuracy'], 'ro-', label='Precisión de
Validación')
[Link]('Precisión Durante el Entrenamiento')
[Link]('Épocas')
[Link]('Precisión')
[Link]()
[Link](True)

plt.tight_layout()
[Link]()

# Ejemplo de uso
if __name__ == "__main__":
# Datos de ejemplo para errores (debes reemplazar esto con tus datos reales)
errors = [0.1, 0.2, 0.15, 0.3, 0.25, 0.2, 0.1, 0.05, 0.4, 0.3]
plot_histogram(errors)

# Supongamos que tienes un objeto `history` del entrenamiento en Keras


# history = [Link](...) # Aquí es donde entrenas tu modelo y obtienes el
historial
# plot_learning_curves(history)
# plot_loss_and_accuracy(history)

import [Link] as plt


import seaborn as sns
import numpy as np
from [Link] import confusion_matrix, roc_curve, auc
from [Link] import make_classification
from sklearn.model_selection import train_test_split
from [Link] import Sequential
from [Link] import Dense
from [Link] import Adam

# Generamos datos de ejemplo


X, y = make_classification(n_samples=1000, n_classes=2, n_features=20,
random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=42)

# Creamos un modelo simple


model = Sequential([
Dense(64, activation='relu', input_shape=(20,)),
Dense(32, activation='relu'),
Dense(1, activation='sigmoid')
])
[Link](optimizer=Adam(), loss='binary_crossentropy', metrics=['accuracy'])

# Entrenamos el modelo
history = [Link](X_train, y_train, validation_split=0.2, epochs=50,
batch_size=32, verbose=0)

# Obtenemos predicciones
y_pred = [Link](X_test)
y_pred_classes = (y_pred > 0.5).astype(int).reshape(-1)

# 1. Gráfica de pérdida y precisión durante el entrenamiento


[Link](figsize=(12, 4))
[Link](1, 2, 1)
[Link]([Link]['loss'], label='Pérdida de entrenamiento')
[Link]([Link]['val_loss'], label='Pérdida de validación')
[Link]('Pérdida del modelo')
[Link]('Época')
[Link]('Pérdida')
[Link]()

[Link](1, 2, 2)
[Link]([Link]['accuracy'], label='Precisión de entrenamiento')
[Link]([Link]['val_accuracy'], label='Precisión de validación')
[Link]('Precisión del modelo')
[Link]('Época')
[Link]('Precisión')
[Link]()
plt.tight_layout()
[Link]()

# 2. Matriz de confusión
cm = confusion_matrix(y_test, y_pred_classes)
[Link](figsize=(8, 6))
[Link](cm, annot=True, fmt='d', cmap='Blues')
[Link]('Matriz de Confusión')
[Link]('Predicción')
[Link]('Verdadero')
[Link]()

# 3. Curva ROC
fpr, tpr, _ = roc_curve(y_test, y_pred)
roc_auc = auc(fpr, tpr)

[Link](figsize=(8, 6))
[Link](fpr, tpr, color='darkorange', lw=2, label=f'Curva ROC (AUC =
{roc_auc:.2f})')
[Link]([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
[Link]([0.0, 1.0])
[Link]([0.0, 1.05])
[Link]('Tasa de Falsos Positivos')
[Link]('Tasa de Verdaderos Positivos')
[Link]('Curva Característica Operativa del Receptor (ROC)')
[Link](loc="lower right")
[Link]()

# 4. Distribución de las predicciones


[Link](figsize=(10, 6))
[Link](y_pred, bins=50, kde=True)
[Link]('Distribución de las Probabilidades de Predicción')
[Link]('Probabilidad de Predicción')
[Link]('Frecuencia')
[Link]()

a import tensorflow as tf

# Convertir el modelo a TensorFlow Lite


converter = [Link].from_keras_model(model)
tflite_model = [Link]()

# Guardar el modelo TFLite en un archivo


with open('/content/drive/MyDrive/Colab
Notebooks/dataset-NARAJANAS/basic_model.tflite', 'wb') as f:
[Link](tflite_model)

print("Modelo convertido a TensorFlow Lite exitosamente.")

También podría gustarte