Estoy construyendo un modelo para clasificar si la persona de la imagen lleva mascarilla o no. Utilicé el modelo EfficientNetB0 con una capa de aumento de datos personalizada (secuencial), todo apilado con la ayuda de la capa funcional. Después de guardar el modelo (en formato h5) y cargar el modelo guardado, la precisión en el conjunto de datos de prueba fue diferente.
La precisión en el conjunto de datos de prueba originalmente era de alrededor del 98 % Después de cargar el modelo guardado, la precisión en el conjunto de datos de prueba se desplomó al 91 %
image_dataset_from_directory para cargar las imágenes para los conjuntos de entrenamiento, prueba y validación.
train_data = keras.preprocessing.image_dataset_from_directory( train_dir, image_size=(224, 224), color_mode="rgb", batch_size=64, label_mode="categorical" )Luego creó un conjunto de datos de búsqueda previa
train_dataset = train_data.shuffle(buffer_size=1000).prefetch(buffer_size=tf.data.AUTOTUNE)Esta es la capa de aumento de datos personalizados:
data_aug = keras.Sequential([ keras.layers.RandomRotation(0.3), keras.layers.RandomContrast(0.3) ])El modelo
inputs = keras.layers.Input(shape=(224, 224, 3)) x = data_aug(inputs) x = eff_model(x, training=False) x = keras.layers.GlobalAveragePooling2D()(x) x = keras.layers.Dense(3, activation="softmax")(x) model = keras.Model(inputs=inputs, outputs=x) model.compile(loss=keras.losses.CategoricalCrossentropy(), metrics=["accuracy"], optimizer=keras.optimizers.Adam(0.001)) history = model.fit(train_dataset, steps_per_epoch=len(train_dataset), epochs=20, validation_data=val_dataset, validation_steps=len(val_dataset))Esta es la precisión que mi modelo logró originalmente en el conjunto de datos de prueba.
Guardando el modelo y recargando el modelo guardado:
model.save("face_Detect.h5") load_model = keras.models.load_model("/content/face_Detect.h5")Esta es la precisión lograda en el modelo cargado:
No tengo idea porque la precisión en el conjunto de datos de prueba para el modelo original y el modelo cargado debería ser similar, pero esta es una gran diferencia. ¿Es esto un error en Tensorflow 2.7.0 o estoy cometiendo algún error terrible?