GTSRB Model-3


            # model with batch normalization 
            # https://github.com/xitizzz/Traffic-Sign-Recognition-using-Deep-Neural-Network
            
            model = Sequential()
            BatchNormalization(epsilon=1e-06, momentum=0.99, weights=None)

            # Block 1 Convolution layer 1,2  Normalization layer 3
            model.add(Conv2D(32, (3, 3), padding='same', input_shape=self.input_shape, activation='relu'))
            model.add(Conv2D(32, (3, 3), activation='relu'))
            model.add(BatchNormalization())
            model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
            model.add(Dropout(0.2))

            # Block 1 Convolution layer 4,5  Normalization layer 6
            model.add(Conv2D(64, (3, 3), padding='same', activation='relu'))
            model.add(Conv2D(64, (3, 3), activation='relu'))
            model.add(BatchNormalization())
            model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
            model.add(Dropout(0.2))

            # Block 1 Convolution layer 7,8  Normalization layer 9
            model.add(Conv2D(128, (3, 3), padding='same', activation='relu'))
            model.add(Conv2D(128, (3, 3), activation='relu'))
            model.add(BatchNormalization())
            model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
            model.add(Dropout(0.2))

            # Block 5 Fully-connected layer 10, Normalization layer 11,  Output layer 12
            model.add(Flatten())
            model.add(Dense(512, activation='relu'))
            model.add(Dropout(0.5))
            model.add(BatchNormalization())
            model.add(Dense(self.num_classes, activation='softmax'))
            lr = 0.01
            decay = 1e-6
            sgd = keras.optimizers.SGD(lr=lr, decay=decay, momentum=0.9, nesterov=True)

            model.compile(loss='categorical_crossentropy',
                          optimizer=sgd,
                          metrics=['accuracy'])