import pandas as pd
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications.resnet import ResNet50
from tensorflow.keras.models import Sequential
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.layers import GlobalAveragePooling2D, Flatten, Dense
def load_train(path):
labels = pd.read_csv('/datasets/faces/labels.csv')
train_datagen = ImageDataGenerator(
rescale=1./255,
validation_split=0.25
)
train_gen_flow = train_datagen.flow_from_dataframe(
dataframe=labels,
directory='/datasets/faces/final_files',
x_col='file_name',
y_col='real_age',
target_size=(224, 224),
batch_size=32,
class_mode='raw',
subset='training',
seed=12345)
return train_gen_flow
def load_test(path):
labels = pd.read_csv('/datasets/faces/labels.csv')
test_datagen = ImageDataGenerator(rescale=1./255)
test_gen_flow = test_datagen.flow_from_dataframe(
dataframe=labels,
directory= '/datasets/faces/final_files',
x_col='file_name',
y_col='real_age',
target_size=(224, 224),
batch_size=32,
class_mode='raw',
subset='validation',
seed=12345)
return test_gen_flow
def create_model(input_shape):
optimizer = Adam(learning_rate = 0.0005)
backbone = ResNet50(
input_shape=(224, 224, 3),
weights='imagenet',
include_top=False
)
model = Sequential()
model.add(backbone)
model.add(GlobalAveragePooling2D())
model.add(Dense(1, activation='relu'))
model.compile(optimizer=optimizer, loss= 'mean_absolute_error', metrics=['mae'])
return model
def train_model(model, train_data, test_data, batch_size=None, epochs=10, steps_per_epoch=None, validation_steps=None):
train_gen_flow=train_data
test_gen_flow=test_data
if steps_per_epoch is None:
steps_per_epoch = len(train_data)
validation_steps = len(test_data)
model.fit(
train_data,
epochs=epochs,
steps_per_epoch=steps_per_epoch,
validation_data=test_data,
validation_steps=validation_steps,
verbose=2)
return model