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())
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)
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())
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))
loss, accuracy = model.evaluate(X_val, y_val)
print(f'Validation Accuracy: {accuracy}')
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))