import tensorflow as tf

            self.conv3 = tf.layers.conv2d(self.pool2, 
                                          self.config.cifar10_cnn["num_filters"],  
                                          self.config.cifar10_cnn["filter_size"],
                                          padding='same', activation=tf.nn.relu)
            self.pool3 = tf.layers.max_pooling2d(self.conv3, 2, 2)
            
            self.conv4 = tf.layers.conv2d(self.pool3, 
                                          self.config.cifar10_cnn["num_filters"], 
                                          self.config.cifar10_cnn["filter_size"],
                                          padding='same', activation=tf.nn.relu)
            self.drop3 = tf.layers.dropout(self.conv4, self.config.cifar10_cnn["keep_prob"], training=self.train)
    
            # b. Flatten input data
            self.flatten = tf.reshape(self.drop3, [-1, self.config.cifar10_cnn["fc1_nb_units"]])

            # Create connected layers: fc1, fc2
            with tf.contrib.framework.arg_scope([tf.contrib.layers.fully_connected], 
                                                normalizer_fn=tf.contrib.layers.batch_norm, 
                                                normalizer_params={"is_training": self.train}):
                self.fc1 = tf.contrib.layers.fully_connected(self.flatten, self.config.cifar10_cnn["fc1_nb_units"])
                self.fc2 = tf.contrib.layers.fully_connected(self.fc1, self.config.data["num_categories"], activation_fn=None)

            # Compute loss
            with tf.name_scope("loss"):
                self.loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=self.fc2, labels=self.y))

