mancooper's picture
Create app.py
7baff63 verified
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
# Set up data directories
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"
# Data augmentation and preprocessing
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
)
# Load pre-trained VGG16 model
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(150, 150, 3))
base_model.trainable = False # Freeze the base model
# Build the model
model = keras.Sequential([
base_model,
layers.Flatten(),
layers.Dense(512, activation='relu'),
layers.Dropout(0.5),
layers.Dense(1, activation='sigmoid')
])
# Compile the model
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
# Train the model
history = model.fit(
train_generator,
validation_data=val_generator,
epochs=10
)
# Save the model
model.save("real_fake_classifier_vgg16.h5")
# Evaluate on test data
test_loss, test_acc = model.evaluate(test_generator)
print(f"Test Accuracy: {test_acc:.4f}")
# Plot training history
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()