| import tensorflow as tf |
| from tensorflow import keras |
| from tensorflow.keras import layers |
| from tensorflow.keras.applications import VGG16 |
| import numpy as np |
| import matplotlib.pyplot as plt |
| from tensorflow.keras.preprocessing.image import ImageDataGenerator |
|
|
| |
| data_dir = "/kaggle/input/deepfake-and-real-images/Dataset" |
| train_dir = f"{data_dir}/Train" |
| val_dir = f"{data_dir}/Validation" |
| test_dir = f"{data_dir}/Test" |
|
|
| |
| datagen = ImageDataGenerator(rescale=1.0/255) |
|
|
| train_generator = datagen.flow_from_directory( |
| train_dir, |
| target_size=(150, 150), |
| batch_size=32, |
| class_mode='binary' |
| ) |
|
|
| val_generator = datagen.flow_from_directory( |
| val_dir, |
| target_size=(150, 150), |
| batch_size=32, |
| class_mode='binary' |
| ) |
|
|
| test_generator = datagen.flow_from_directory( |
| test_dir, |
| target_size=(150, 150), |
| batch_size=32, |
| class_mode='binary', |
| shuffle=False |
| ) |
|
|
| |
| base_model = VGG16(weights='imagenet', include_top=False, input_shape=(150, 150, 3)) |
| base_model.trainable = False |
|
|
| |
| model = keras.Sequential([ |
| base_model, |
| layers.Flatten(), |
| layers.Dense(512, activation='relu'), |
| layers.Dropout(0.5), |
| layers.Dense(1, activation='sigmoid') |
| ]) |
|
|
| |
| model.compile(optimizer='adam', |
| loss='binary_crossentropy', |
| metrics=['accuracy']) |
|
|
| |
| history = model.fit( |
| train_generator, |
| validation_data=val_generator, |
| epochs=10 |
| ) |
|
|
| |
| model.save("real_fake_classifier_vgg16.h5") |
|
|
| |
| test_loss, test_acc = model.evaluate(test_generator) |
| print(f"Test Accuracy: {test_acc:.4f}") |
|
|
| |
| plt.plot(history.history['accuracy'], label='accuracy') |
| plt.plot(history.history['val_accuracy'], label='val_accuracy') |
| plt.xlabel('Epoch') |
| plt.ylabel('Accuracy') |
| plt.legend() |
| plt.show() |
|
|