Epochs that are multiples of 2 are finishing very quickly. I don’t think my model is being trained. I’m using tensorflow keras to train my model. I am using colab environment.
Here is the results of training: Model training result screenshot
I am using the ResNet architecture. My batch size is 32. However, inexplicably, the epochs that are multiples of 2 finish quickly, and the accuracy of my model increases in an inexplicable way. I have 4 classes. 4027 images for training, 1150 images for validating, 577 images for testing. What could be the reason for this?
Here is what my code looks like:
data processing part:
train_dir = '/splitted-dataset/train'
validation_dir = '/splitted-dataset/val'
test_dir = '/splitted-dataset/test'
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=15,
width_shift_range=0.1,
height_shift_range=0.1,
horizontal_flip=True
)
validation_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(256, 256),
batch_size=32,
class_mode='categorical'
)
validation_generator = validation_datagen.flow_from_directory(
validation_dir,
target_size=(256, 256),
batch_size=32,
class_mode='categorical'
)
test_generator = test_datagen.flow_from_directory(
test_dir,
target_size=(256, 256),
batch_size=32,
class_mode='categorical'
)
model structure part :
input_tensor = Input(shape=(256, 256, 3))
resnet_model = ResNet50(weights='imagenet', include_top=False, input_tensor=input_tensor)
x = resnet_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(256, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(0.5)(x)
output_tensor = Dense(train_generator.num_classes, activation='softmax')(x)
model = Model(inputs=input_tensor, outputs=output_tensor)
model.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=['accuracy'])
model training part :
history = model.fit(
train_generator,
steps_per_epoch=train_generator.samples // train_generator.batch_size,
epochs=10,
validation_data=validation_generator,
)
test_loss, test_acc = model.evaluate(test_generator, verbose=2)
print(f"Test Accuracy: {test_acc:.2f}")
I tried different batch sizes and L2 regularization, but I couldn’t get useful results.
2