I'm trying to build a 2 class image classifier using the architecture suggested in first part of this blog https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html
My dataset has 1500 images of class1 and 500 images of class2. I created 4 copies of class2 to make the number of images same in both classes.
I also use ImageDataGenerator to augment images
datagen = ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
shear_range=0.2,
zoom_range=0.5,
rotation_range=45,
horizontal_flip=True,
vertical_flip=True)
datagen.fit(train_imgs)
I'm using AdaDelta,RMSProp, SGD, Adam, AdaGrad optimizers and tried adding/removing Conv2D and Dense layers. Tried BatchNormalizationa and Dropout. The results are coming out almost same:
For first few epochs(about 20) training and validation errors keep reducing until log loss reaches about 0.4 (best I have got till now) after that the model starts to overfit and validation loss keeps increasing.
I know I can prevent overfitting by reducing the network complexity and adding dropouts but that reduces the training accuracy too.
Please suggest some tips to improve the accuracy and avoid overfitting.