How to identify the areas to reduce over fitting?

I am trying classify CIFAR10. The CNN that I generated over fits when the accuracy reaches ~77%. The code and the plot is given below. I tried DropOut, Batch Normalization and L2 Regularization. But the accuracy does not go beyond ~77.

How can I identify the areas to be corrected to reduce over fitting?

convolutional_model = Sequential()

# 32
convolutional_model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3), kernel_regularizer=regularizers.l2(.0002)))

# 64

print(convolutional_model.summary())
es = EarlyStopping(monitor='val_loss', mode='min', verbose=2, patience=8)
history = convolutional_model.fit(X_Train_Part, Y_Train_Part, epochs=200, verbose=2,validation_data=(X_Train_Validate, Y_Train_Validate), callbacks=[es])

scores = convolutional_model.evaluate(X_Test, Y_Test, verbose=2)


• Please, ask just one question per post! – nbro Apr 19 '19 at 18:25
• Welcome to SE:AI! I'm leaving this question open pending more closevotes, but please consider reducing it to a single question. (You can always ask additional question in separate posts.) – DukeZhou Apr 19 '19 at 19:32
• Edited the post to reduce number of questions – Maanu Apr 20 '19 at 1:40

There could be a lot of things that you could consider to reduce over fitting. Some of them are $$L_2$$ regularizers, Dropout, depth of the network, number of neurons in the layers, the optimizer, etc.