{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":16880,"databundleVersionId":858837,"sourceType":"competition"},{"sourceId":3134515,"sourceType":"datasetVersion","datasetId":1909705}],"dockerImageVersionId":30775,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"Define the paths to the training data","metadata":{}},{"cell_type":"code","source":"import os\nimport numpy as np\nimport tensorflow as tf\nfrom tensorflow.keras import layers, models\nfrom tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\n\n# Clear any previous Keras session\ntf.keras.backend.clear_session()\n\n# Define the path to the training images\ntrain_images_path = '/kaggle/input/deepfake-and-real-images/Dataset/Train'  # Update this path to your dataset\n\n# Define parameters\nimg_height, img_width = 224, 224  # Target image size\nbatch_size = 32  # Adjust the batch size as needed\n\n# Data augmentation and preprocessing\ndata_gen = ImageDataGenerator(\n    rescale=1./255,  # Normalize pixel values to [0, 1]\n    validation_split=0.2  # Split data for validation\n)\n\n# Create training and validation generators\ntrain_generator = data_gen.flow_from_directory(\n    train_images_path,\n    target_size=(img_height, img_width),\n    batch_size=batch_size,\n    class_mode='binary',  # Binary classification (fake or real)\n    subset='training',  # Set as training data\n    shuffle=True  # Shuffle the data for training\n)\n\nvalidation_generator = data_gen.flow_from_directory(\n    train_images_path,\n    target_size=(img_height, img_width),\n    batch_size=batch_size,\n    class_mode='binary',  # Binary classification\n    subset='validation'  # Set as validation data\n)\n\n# Define a smaller model (for example, MobileNetV2)\nbase_model = tf.keras.applications.MobileNetV2(input_shape=(img_height, img_width, 3), include_top=False, weights='imagenet')\nbase_model.trainable = False  # Freeze base model layers\n\nmodel = models.Sequential([\n    base_model,\n    layers.GlobalAveragePooling2D(),  # Use Global Average Pooling\n    layers.Dropout(0.5),  # Dropout to prevent overfitting\n    layers.Dense(128, activation='relu'),\n    layers.Dense(1, activation='sigmoid')  # Binary output\n])\n\n# Compile the model\nmodel.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])\n\n# Implement Early Stopping and Model Checkpoint\nearly_stopping = EarlyStopping(monitor='val_loss', patience=3, restore_best_weights=True)\nmodel_checkpoint = ModelCheckpoint('/kaggle/working/defake_ai_best.keras', save_best_only=True)\n\n# Train the model\nmodel.fit(\n    train_generator,\n    validation_data=validation_generator,\n    epochs=15,  # Increase epochs as necessary\n    callbacks=[early_stopping, model_checkpoint]\n)\n\n# Save the final model\nmodel.save('/kaggle/working/defake_ai_final.keras')\n","metadata":{"execution":{"iopub.status.busy":"2024-10-04T13:59:51.287076Z","iopub.execute_input":"2024-10-04T13:59:51.288214Z","iopub.status.idle":"2024-10-04T16:16:36.490438Z","shell.execute_reply.started":"2024-10-04T13:59:51.288158Z","shell.execute_reply":"2024-10-04T16:16:36.489619Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!zip -r defake_model.zip /kaggle/working/defake_ai_final.keras","metadata":{"execution":{"iopub.status.busy":"2024-10-04T17:22:14.330077Z","iopub.execute_input":"2024-10-04T17:22:14.330814Z","iopub.status.idle":"2024-10-04T17:22:14.337171Z","shell.execute_reply.started":"2024-10-04T17:22:14.330773Z","shell.execute_reply":"2024-10-04T17:22:14.335881Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Initialize lists to hold the images and labels","metadata":{}}]}