import tensorflow as tf


            # 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))

            # Optimizer
            with tf.name_scope("training_op"):
                self.training_op = tf.compat.v1.train.AdamOptimizer(self.learning_rate).minimize(self.loss)

            # Perf metrics
            with tf.name_scope("accuracy"):
