diff --git a/skin_cancer_classification.py b/skin_cancer_classification.py index fbf7d51..61b4c54 100644 --- a/skin_cancer_classification.py +++ b/skin_cancer_classification.py @@ -29,7 +29,7 @@ Original file is located at import sys IN_COLAB = 'google.colab' in sys.modules -# f IN_COLAB: +# if IN_COLAB: # !pip install pandas numpy matplotlib seaborn pillow scikit-learn tensorflow # !pip install --upgrade kagglehub[pandas-datasets,hf-datasets] @@ -241,6 +241,12 @@ from tensorflow.keras.applications import DenseNet121 from tensorflow.keras.applications.densenet import preprocess_input from tensorflow.keras.layers import Dense, GlobalAveragePooling2D from tensorflow.keras.models import Model +from tensorflow.keras.optimizers import Adam + +gpus = tf.config.list_physical_devices('GPU') +print("GPUs:", gpus) + +strategy = tf.distribute.MirroredStrategy() data_augmentation = tf.keras.Sequential([ tf.keras.layers.RandomFlip("horizontal"), @@ -265,7 +271,9 @@ x = Dense(512, activation='relu')(x) # Added another Dense layer x = Dense(256, activation='relu')(x) # Existing Dense layer predictions = Dense(1, activation='sigmoid')(x) # Output layer for binary classification -model = Model(inputs=base_model.input, outputs=predictions) +with strategy.scope(): # Use all gpus + model = Model(inputs=base_model.input, outputs=predictions) + model.compile(optimizer=Adam(learning_rate=0.0001), loss='binary_crossentropy', metrics=['accuracy']) """## 4. Data Generators @@ -313,21 +321,7 @@ val_generator = val_datagen.flow_from_dataframe( seed=42 ) -"""## 5. Compile the Model - -I will compile the model using the Adam optimizer, binary cross-entropy loss (suitable for binary classification), and track accuracy as a metric. -""" - - - -from tensorflow.keras.optimizers import Adam - -model.compile(optimizer=Adam(learning_rate=0.0001), loss='binary_crossentropy', metrics=['accuracy']) - -"""## 6. Train the Model - -I will now train the model using the prepared data generators. I'll also add callbacks for early stopping to prevent overfitting and to save the best model. -""" +"""## 6. Train the Model""" from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint @@ -354,7 +348,7 @@ history = model.fit( class_weight=class_weights # Use class weights to handle imbalance ) -"""## X. Evaluation +"""## 7. Evaluation ### Load best model """