Prime810 commited on
Commit
a425514
·
verified ·
1 Parent(s): 0d2864e

Update Training/Code/train.py

Browse files
Files changed (1) hide show
  1. Training/Code/train.py +15 -12
Training/Code/train.py CHANGED
@@ -1,11 +1,11 @@
1
  import os
2
  import numpy as np
3
- from keras.models import Model
4
- from keras.layers import Dense, Dropout, GlobalAveragePooling2D, Input
5
- from keras.optimizers import Adam
6
- from keras_preprocessing.image import ImageDataGenerator
7
- from keras.applications import MobileNetV2
8
- from keras.callbacks import EarlyStopping, ModelCheckpoint
9
 
10
  # Define paths
11
  base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../'))
@@ -24,17 +24,20 @@ train_datagen = ImageDataGenerator(
24
  )
25
  val_datagen = ImageDataGenerator(rescale=1./255)
26
 
 
 
 
27
  train_generator = train_datagen.flow_from_directory(
28
- train_dir, target_size=(96, 96), batch_size=32, color_mode='rgb', class_mode='categorical')
29
 
30
  validation_generator = val_datagen.flow_from_directory(
31
- val_dir, target_size=(96, 96), batch_size=32, color_mode='rgb', class_mode='categorical')
32
 
33
  # Load base model
34
- base_model = MobileNetV2(include_top=False, input_shape=(96, 96, 3), weights='imagenet')
35
  base_model.trainable = False # Freeze base layers
36
 
37
- # Add custom layers
38
  x = base_model.output
39
  x = GlobalAveragePooling2D()(x)
40
  x = Dense(256, activation='relu')(x)
@@ -47,11 +50,11 @@ model.compile(optimizer=Adam(learning_rate=0.0001), loss='categorical_crossentro
47
  # Callbacks
48
  callbacks = [
49
  EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True),
50
- ModelCheckpoint('best_model.h5', monitor='val_loss', save_best_only=True)
51
  ]
52
 
53
  # Train the model
54
  model.fit(train_generator, validation_data=validation_generator, epochs=30, callbacks=callbacks)
55
 
56
- # Save model
57
  model.save("emotion_model.keras")
 
1
  import os
2
  import numpy as np
3
+ from tensorflow.keras.models import Model
4
+ from tensorflow.keras.layers import Dense, Dropout, GlobalAveragePooling2D, Input
5
+ from tensorflow.keras.optimizers import Adam
6
+ from tensorflow.keras.preprocessing.image import ImageDataGenerator
7
+ from tensorflow.keras.applications import MobileNetV2
8
+ from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
9
 
10
  # Define paths
11
  base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../'))
 
24
  )
25
  val_datagen = ImageDataGenerator(rescale=1./255)
26
 
27
+ # Use a larger image size for better accuracy
28
+ img_size = 128
29
+
30
  train_generator = train_datagen.flow_from_directory(
31
+ train_dir, target_size=(img_size, img_size), batch_size=32, color_mode='rgb', class_mode='categorical')
32
 
33
  validation_generator = val_datagen.flow_from_directory(
34
+ val_dir, target_size=(img_size, img_size), batch_size=32, color_mode='rgb', class_mode='categorical')
35
 
36
  # Load base model
37
+ base_model = MobileNetV2(include_top=False, input_shape=(img_size, img_size, 3), weights='imagenet')
38
  base_model.trainable = False # Freeze base layers
39
 
40
+ # Add custom classification head
41
  x = base_model.output
42
  x = GlobalAveragePooling2D()(x)
43
  x = Dense(256, activation='relu')(x)
 
50
  # Callbacks
51
  callbacks = [
52
  EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True),
53
+ ModelCheckpoint('best_model.keras', monitor='val_loss', save_best_only=True)
54
  ]
55
 
56
  # Train the model
57
  model.fit(train_generator, validation_data=validation_generator, epochs=30, callbacks=callbacks)
58
 
59
+ # Save the final model
60
  model.save("emotion_model.keras")