FINALPROJ / src /train.py
Jephone Israel Jireh S. Torre
1st push
e55378f
import os
import numpy as np
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.optimizers import Adam
from utils.preprocess import load_images_from_folder # adjust import if needed
# Parameters
DATASET_PATH = './data/train'
IMG_SIZE = (48, 48) # Example size (width, height)
NUM_CLASSES = 7 # Number of emotion classes, adjust accordingly
EPOCHS = 30
BATCH_SIZE = 64
# Load data
x_data, y_data, emotions = load_images_from_folder(DATASET_PATH, IMG_SIZE)
# Preprocess labels
y_data_cat = to_categorical(y_data, num_classes=NUM_CLASSES)
# Normalize images
x_data = x_data.astype('float32') / 255.0
# Build a simple CNN model
model = Sequential([
Conv2D(32, (3,3), activation='relu', input_shape=(IMG_SIZE[0], IMG_SIZE[1], 1)),
MaxPooling2D(2,2),
Conv2D(64, (3,3), activation='relu'),
MaxPooling2D(2,2),
Conv2D(128, (3,3), activation='relu'),
MaxPooling2D(2,2),
Flatten(),
Dense(128, activation='relu'),
Dropout(0.5),
Dense(NUM_CLASSES, activation='softmax')
])
model.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=['accuracy'])
# Train
model.fit(x_data, y_data_cat, epochs=EPOCHS, batch_size=BATCH_SIZE, validation_split=0.2)
# Save model
os.makedirs('./models', exist_ok=True)
model.save('./models/emotion_model.h5')
print("Training complete and model saved.")