model = Sequential() # 1st Convolutional Layer model.add(Conv2D(filters = 96, input_shape = (224, 224, 3), kernel_size = (11, 11), strides = (4, 4), padding = 'valid')) model.add(Activation('relu')) # Max-Pooling model.add(MaxPooling2D(pool_size = (2, 2), strides = (2, 2), padding = 'valid')) # Batch Normalisation model.add(BatchNormalization()) # 2nd Convolutional Layer model.add(Conv2D(filters = 256, kernel_size = (11, 11), strides = (1, 1), padding = 'valid')) model.add(Activation('relu')) # Max-Pooling model.add(MaxPooling2D(pool_size = (2, 2), strides = (2, 2), padding = 'valid')) # Batch Normalisation model.add(BatchNormalization()) # 3rd Convolutional Layer model.add(Conv2D(filters = 384, kernel_size = (3, 3), strides = (1, 1), padding = 'valid')) model.add(Activation('relu')) # Batch Normalisation model.add(BatchNormalization()) # 4th Convolutional Layer model.add(Conv2D(filters = 384, kernel_size = (3, 3), strides = (1, 1), padding = 'valid')) model.add(Activation('relu')) # Batch Normalisation model.add(BatchNormalization()) # 5th Convolutional Layer model.add(Conv2D(filters = 256, kernel_size = (3, 3), strides = (1, 1), padding = 'valid')) model.add(Activation('relu')) # Max-Pooling model.add(MaxPooling2D(pool_size = (2, 2), strides = (2, 2), padding = 'valid')) # Batch Normalisation model.add(BatchNormalization()) # Flattening model.add(Flatten()) # 1st Dense Layer model.add(Dense(4096, input_shape = (224*224*3, ))) model.add(Activation('relu')) # Add Dropout to prevent overfitting model.add(Dropout(0.4)) # Batch Normalisation model.add(BatchNormalization()) # 2nd Dense Layer model.add(Dense(4096)) model.add(Activation('relu')) # Add Dropout model.add(Dropout(0.4)) # Batch Normalisation model.add(BatchNormalization()) # Output Softmax Layer model.add(Dense(num_classes)) model.add(Activation('softmax'))