# Problem with overfitting for a CNN

I am doing image classification with a CNN and I am having trouble building a network that does not do overfitting. I have in my training set 2000 images of 4 classes, while in my test set I have 3038 of the same 4 classes. My CNN is the following:

def Network(input_shape, num_classes, regl2 = 0.0001, lr=0.0001):

model = Sequential()

# C1 Convolutional Layer
# Pooling
# Batch Normalisation before passing it to the next layer

# C2 Convolutional Layer
# Batch Normalisation

# C3 Convolutional Layer
# Batch Normalisation

# C4 Convolutional Layer
#Pooling
# Batch Normalisation

# C5 Convolutional Layer
# Pooling
# Batch Normalisation

# C6 Convolutional Layer
# Pooling
# Batch Normalisation

# C7 Convolutional Layer
# Pooling
# Batch Normalisation

# Flatten

flatten_shape = (input_shape[0]*input_shape[1]*input_shape[2],)

# D1 Dense Layer
# Dropout
# Batch Normalisation

# D2 Dense Layer
# Dropout
# Batch Normalisation

# D3 Dense Layer
# Dropout
# Batch Normalisation

# Output Layer

# Compile

return model


and everytime I train and test I clearly overfit, because if I test the model I obtain a low accuracy, around 45%, and the curves of accuracy for test and training are really far apart if I plot them.

How could I improve my network in such a way it does not overfits?