Spaces:
Sleeping
Sleeping
| import os | |
| from tensorflow.keras.applications import Xception | |
| from tensorflow.keras.models import Model | |
| from tensorflow.keras.layers import Input, GlobalAveragePooling2D, Dense, Dropout | |
| # Suppress TensorFlow logs | |
| os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' | |
| def build_baseline_model(image_size): | |
| """ | |
| Builds a baseline CNN model using Xception as a base. | |
| """ | |
| # 1. Define the input shape | |
| input_tensor = Input(shape=(image_size, image_size, 3)) | |
| # 2. Load the Xception base model, pre-trained on ImageNet. | |
| # We don't include the final classification layer (include_top=False). | |
| base_model = Xception( | |
| weights='imagenet', | |
| include_top=False, | |
| input_tensor=input_tensor | |
| ) | |
| # 3. Freeze the base model's layers | |
| # We do this so we only train our new "head" layers | |
| base_model.trainable = False | |
| # 4. Add our custom classification head | |
| x = base_model.output | |
| x = GlobalAveragePooling2D()(x) # Condenses the features | |
| x = Dropout(0.5)(x) # Adds regularization to prevent overfitting | |
| x = Dense(256, activation='relu')(x) | |
| x = Dropout(0.5)(x) | |
| # 5. Add the final output layer | |
| # Sigmoid activation is used for binary (0 or 1) classification | |
| output_tensor = Dense(1, activation='sigmoid', name='output')(x) | |
| # 6. Create the final model | |
| model = Model(inputs=input_tensor, outputs=output_tensor) | |
| return model | |
| if __name__ == "__main__": | |
| # A quick test to see if the model builds correctly | |
| print("Building test model...") | |
| # Import image size from our config | |
| try: | |
| from config import TARGET_IMAGE_SIZE | |
| model = build_baseline_model(TARGET_IMAGE_SIZE) | |
| model.summary() | |
| print("Model built successfully!") | |
| except ImportError: | |
| print("Error: Could not import TARGET_IMAGE_SIZE from config.") | |
| except Exception as e: | |
| print(f"Error building model: {e}") |