Co-creación (Lección 9) - Desarrollo Colaborativo del Proyecto

Objetivos

1. Recolección y Preprocesamiento de Datos

Recolección de Datos

Obtener un conjunto de datos de imágenes de rayos X de fuentes públicas (por ejemplo, Kaggle).


    import os   
    import pandas as pd 
    data_dir = 'path_to_dataset'    
    images = [os.path.join(data_dir, img) for img in os.listdir(data_dir)]  
    labels = [1 if 'disease' in img else 0 for img in images]   
    df = pd.DataFrame({'image_path': images, 'label': labels})  
    print(df.head())
                

Preprocesamiento de Imágenes

Redimensionamiento y normalización de imágenes.


    from PIL import Image
    import numpy as np
    def preprocess_image(image_path):
        img = Image.open(image_path)
        img = img.resize((128, 128))
        img = np.array(img) / 255.0
        return img
    df['image'] = df['image_path'].apply(preprocess_image)  
    print(df['image'].shape)
                

2. Implementación del Modelo de Clasificación

Selección del Modelo

Uso de una red neuronal convolucional (CNN) para la clasificación de imágenes.


    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
    
    model = Sequential([
        Conv2D(32, (3, 3), activation='relu', input_shape=(128, 128, 3)),
        MaxPooling2D((2, 2)),
        Conv2D(64, (3, 3), activation='relu'),
        MaxPooling2D((2, 2)),
        Flatten(),
        Dense(128, activation='relu'),
        Dense(1, activation='sigmoid')
    ])
    
    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])   
    print(model.summary())
                

Entrenamiento del Modelo


    from sklearn.model_selection import train_test_split
    X = np.stack(df['image'].values)
    y = df['label'].values
    X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)     
    
    model.fit(X_train, y_train, epochs=10, validation_data=(X_val, y_val))
                

3. Evaluación y Ajuste del Modelo

Evaluación del Modelo


    loss, accuracy = model.evaluate(X_val, y_val)   
    print(f'Validation Accuracy: {accuracy}')
                

Ajuste de Hiperparámetros

Exploración de diferentes configuraciones de la red y parámetros de entrenamiento.


    from tensorflow.keras.optimizers import Adam
    
    def build_model(learning_rate):
        model = Sequential([
            Conv2D(32, (3, 3), activation='relu', input_shape=(128, 128, 3)),   
            MaxPooling2D((2, 2)),
            Conv2D(64, (3, 3), activation='relu'),
            MaxPooling2D((2, 2)),
            Flatten(),
            Dense(128, activation='relu'),
            Dense(1, activation='sigmoid')
        ])
        
        model.compile(optimizer=Adam(learning_rate=learning_rate), 
                        loss='binary_crossentropy', metrics=['accuracy'])
        return model
    
    model = build_model(learning_rate=0.001)
    model.fit(X_train, y_train, epochs=10, validation_data=(X_val, y_val))